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 編輯 ]