这是半成品,可以转换一些较小的数,本人技术不精,不能用long int ,所以数字大了会溢出,正在改进中,还请各位大佬指教。
#include<stdio.h>
#include<math.h>
#include<string.h>
unsigned long long int dtob(int x);
int btod(int x);
int btoo(int x);
int main()
{
int m;
unsigned long long x,y;
printf("输入几转几:\n例如输入102就代表将输入的十进制数转化为二进制数\n");
scanf("%d",&m);
printf("输入数据:\n");
scanf("%lld",&x);
switch(m)
{
case 1610:y=(int)x;break;
case 168:
case 162:
case 1016:
case 108:
case 102:y=dtob(x);printf("%lld",y);break;
case 816:
case 810:
case 82:
case 216:y=btod(x);printf("%X",y);break;
case 210:y=btod(x);printf("%d",y);break;
case 28:y=btoo(x);printf("%d",y);break;
}
return 0;
}
unsigned long long int dtob( int x)//自定义十进制转二进制函数 ,这里使用int来表示二进制的位数,结果将受到位数的限制
{
int y=0,i,s=0;
unsigned long long z=0;
for (i=0;x!=0;i++)
{s=x/2;
y=x%2;
z+=y*pow(10,i);
x=s;
}
return z;
}
int btod(int x)//自定义二进制转十进制函数
{
int i,z=0,w=0,l;
l=sizeof(x);
for (i=0;i<l;i++)
{
w=x%10;
z+=w*pow(2,i);
x/=10;
}
return z;
}
int btoo(int x)//自定义二进制转八进制函数
{
int i,z=0,w=0,l;
l=sizeof(x);
for (i=0;i<l;i++)
{
w=x%1000;
z+=btod(w)*pow(10,i);
x/=1000;
}
return z;
}
显而易见,由于C语言编译器的限制,在用unsigned long long int输出二进制时,还是会收到位数限制。所以,应该用更合适的方法来表示进制数,比如数组。