怎么将十进制转换为不常用的其他进制啊
程序代码:
#include <iostream> #include <stdlib.h> //#include "transition.h" //using namespace std; //#include <iostream> #include <cmath> using namespace std; class transition { private: double oldNum;//待转换的数 double newNum;//转换后的数 int newBase;//带转换的数的进制 int oldBase;//转换成的进制数 public: transition(double a,int b,int c); //~transition(); int calculate(transition &a);//判断是几进制转换成几进制,在调用相应的函数 void ten_other(transition &a);//十进制转换为其他进制 void other_ten(transition &a);//其他进制转换为十进制 void output(transition &a);//输出 }; transition::transition(double a,int b,int c) { oldNum=a; newBase=b; oldBase=c; newNum=0; } int transition::calculate(transition &a) { if(a.oldBase<0&&a.newBase<0) { cout<<"进制位错误"<<endl; exit(0); } else if(a.oldBase!=10) { if(a.newBase!=10) return 0;//其他进制转换其它进制 return 2;//其他进制转换为10进制 } else { return 1;//十进制转换为其他进制 } } void transition::ten_other( transition &a) { if(a.newNum==0)//直接由十进制转换为其他进制 { int i;//i为整数位的原数 double k;//k为非整数位的 i=(int)a.oldNum; k=a.oldNum-i; int l=1; while (k) { k*=a.newBase; a.newNum+=(int)k/pow(10.0,l); k=k-(int)k; l++; } l=0; while(i) { a.newNum+=(i%a.newBase)*pow(10.0,l); i/=a.newBase; l++; } } else //由其他进制转换为其他进制,先通过ten_other函数转换为十进制,再通过这转换 { double c; c=a.newNum; a.newNum=0; int i;//i为整数位的原数 double k;//k为非整数位的 i=(int)c; k=c-i; int l=1; while (k) { k*=a.newBase; a.newNum+=(int)k/pow(10.0,l); k=k-(int)k; cout<<'1'<<endl; l++; } l=0; while(i) { a.newNum+=(i%a.newBase)*pow(10.0,l); i/=a.newBase; l++; } } } void transition::other_ten(transition &a) { double c; c=a.oldNum; a.newNum=0; int i;//i为整数位的原数 double k;//k为非整数位的 i=(int)c; k=c-i; int l=1; while(k) { k=k*10; a.newNum+=(int)k/pow((double)a.oldBase,l); k=k-(int)k; l++; } l=0; while(i) { a.newNum+=i%10*pow((double)a.oldBase,l); i/=10; l++; } } void transition::output(transition &a) { cout<<a.oldBase<<"进制数"<<a.oldNum<<"转换为"<<a.newBase<<"进制数后为"<<a.newNum<<endl; } void fun(transition &a) { int i; i=a.calculate(a); if(i==0)//其他进制位转换为其他进制位 { a.other_ten(a); a.ten_other(a); a.output(a); } else if(i==1)//十进制转换为其他进制 { a.ten_other(a); a.output(a); } else if(i==2) { a.other_ten(a); a.output(a); } } int main() { double oldNum; int newBase; int oldBase; cout<<"请输入待转换的数的进制数"<<endl; cin>>oldBase; cout<<"请输入待转换的数"<<endl; cin>>oldNum; cout<<"请输入转换后的数的进制数"<<endl; cin>>newBase; transition a(oldNum,newBase,oldBase); fun(a); cin.get(); return 0; }我用这种算法的时候,假如输入的是
10
.5
9
就就会因为尾数一直是.5而陷入死循环啊,这怎么破啊,谢谢了
[ 本帖最后由 a99875984 于 2013-4-2 14:38 编辑 ]