發新話題

[教學]無敵牌進制轉換器 2 至 35 進制皆適用

[教學]無敵牌進制轉換器 2 至 35 進制皆適用

DEV-C
複製內容到剪貼板
代碼:
#include <iostream>
#include <deque>
#include <conio.h>
using namespace std;

const string digits="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int get_input(int& srcBase, int& destBase, deque<int>& src)
{
char c;
        do {
                cout<<"Input source base      (2-35) : ";
                cin>>srcBase;
                cout<<"Input destination base (2-35) : ";
                cin>>destBase;
        } while (srcBase<2||srcBase>35||destBase<2||destBase>35||srcBase==destBase);
        cout<<"Input the numeber : ";
        while ((c=getch())!='\r') {
                if (c=='\b') {
                         if (!src.empty()) {
                                cout<<c<<' '<<c;
                                src.pop_back();
                        }
                }
                else {                        
                        int v = digits.find(toupper(c));
                if (v<srcBase) {
                                cout<<c;
                                src.push_back(v);
                        }
                }
        }
        return src.size();
}

void change_base(int srcBase, deque<int>src, int destBase, deque<int>& dest)
{
int r;
        while (!src.empty()) {
                r=0;
                for (deque<int>::iterator itr=src.begin();itr!=src.end();itr++) {
                        r*=srcBase;
                        r+=*itr;
                        *itr=r/destBase;
                        r%=destBase;
                }
                dest.push_front(r);
                while (!src.empty() && *src.begin()==0) src.pop_front();
        }
}

int main()
{
int srcBase, destBase;
deque<int> src, dest;
        if (get_input(srcBase, destBase, src)>0) {
                cout<<"\nThe answer is : ";
                change_base(srcBase,src,destBase,dest);
                for (deque<int>::iterator itr=dest.begin(); itr!=dest.end();itr++)
                        cout<<digits[*itr];
                cout<<endl;
        }
        else cout<<"Nothing input!"<<endl;
        system("PAUSE");
        return 0;
}
[ 本帖最後由 philxyz0316 於 2006-8-27 13:07 編輯 ]

TOP

發新話題

本站所有圖文均屬網友發表,僅代表作者的觀點與本站無關,如有侵權請通知版主會盡快刪除。