下面是一个用c++写的数制转换小程序,可以实现常见的数制之间的转换。
#include <cstdlib>
#include <iostream>
#define N 4
using namespace std;
//定义函数 dectoother(),该函数能够将一个十进整数转换成其他进制的数 ,并将结果输出
void dectoother1(float number,int n)
{ int output[N][8] = {0},mod=0 ;
int div=0;
unsigned char b[N]={0};
for(int i=0;i<N;i++) b[i]=*(( char *)&number+i);
for(int i=0;i<N;i++)
{ div=b[i];
for(int j=0;j<8;j++)
{output[i][j]=div%n; div/=n;}
}
cout <<"("<<number<<")10 = (" ;
for(int i=N-1;i>=0;i--)
{ for(int j=7;j>=0;j--)
{ if((i==N-1&&j==6)||(i==N-2&&j==6))cout <<" " ;
cout <<output[i][j];
}
}
cout <<"/b)"<< n <<endl ;
}
//定义函数 dectoother(),该函数能够将一个十进整数转换成其他进制的数 ,并将结果输出
void dectoother1(int number,int n)
{ int output[N][8] = {0},mod=0 ;
int div=0;
unsigned char b[N]={0};
for(int i=0;i<N;i++) b[i]=*(( char *)&number+i);
for(int i=0;i<N;i++)
{ div=b[i];
for(int j=0;j<8;j++)
{output[i][j]=div%n; div/=n;}
}
cout <<"("<<number<<")10 = (" ;
for(int i=N-1;i>=0;i--)
{for(int j=7;j>=0;j--)cout <<output[i][j]; cout <<" "; }
cout <<"/b)"<< n <<endl ;
}
int gotoloop() //此函数询问用户是否退出程序
{
//询问是否退出
char c;
loop1 : cout <<"是否退出程序?(Y/N)";
/* 通过 while 循环把输入流中的余留数据“吃”掉 */
while ( (c=getchar()) != '/n' && c != EOF ) ;
switch(getchar())
{
case 'n':
case 'N': cout<<endl;return 1;
case 'y':
case 'Y': return 0;
default :cout <<"输入错误!";
goto loop1;
}
}
//主函数
int main(int argc, char *argv[])
{ //程序介绍
cout <<"************************************************/n"
<<"* 此程序可以根据输入,将十进制数 */n"
<<"* 转换成相应的其他进制的数并输出. */n"
<<"* 制作人:王祥林 时间:2008-3-22 */n"
<<"************************************************/n";
// 提示输入
loop : float fnumber=0;
int dnumber=0,other=2,flag=0;
cout <<"你将输入的数是:1,整数 2,浮点数" <<endl
<<"请输入数字代号:" ;
cin >>flag;
if(1==flag) { cout << "请输入一个要转换的十进制整数,并以ENTER键结束输入:" ;
cin >>dnumber ;
}
else { cout << "请输入一个要转换的十进制浮点数,并以ENTER键结束输入:" ;
cin >>fnumber ;
}
cout <<"2,二进制/n3,三进制/n4,四进制/n......" <<endl
<<"请输入将要转换成的进制的数字代号,并以ENTER键结束输入:" ;
cin >> other ;
//调用数值转换函数
if(1==flag)dectoother1(dnumber,other) ;
else dectoother1(fnumber,other) ;
//询问是否退出
if(gotoloop())goto loop;
//退出程序
return 0;
}