我们在日常生活中都是用的是十进制比如0,1,2,3,4等等,但计算机以二进制为基础,在进行输入,输出和显示时也会用到其他进制,这是我们就要进行进制转换
编写程序时,首先用户输入一个数,并选择应该转换成几进制数,再将结果输出。如果在输入过程中出现错误,程序提示出错。
问题分析
用户输入的数可分为十进制数和非十进制数。
十进制数用辗转相除法,即除N取余除到商为0为止,然后将除得的结果逆序输出
非十进制数要按权展开得到十进制数后计算
这里我们使用函数
首先我们需要把输入的字符数字展会成十进制数
long change(int a[],int len,int b)
{
int i,k=1;
long num=0;
for(i=1;i<=len;i++)
{
num=num+a[i]*k;
k=k*b; //k表示权值
}
return num;
}
然后我们就需要写转换的函数啦
这里我们用ten-to-oth()表示将十进制转换成其他进制
ten_to_oth()
{
int sum,n,j,i=0,arr[80];
printf("请输入十进制数:");
scanf("%d",&sum);
printf("请输入想要转换的进制数:");
scanf("%d",&n);
do
{
i++; //从下标一开始计数
arr[i]=sum%n;
sum=sum/n;
if(i>=80) printf("overflow\n");
}while(sum!=0);
printf("结果是:\n");
for(j=i;j>0;j--) //逆序输出
printf("%d",arr[j]);
printf("\n");
return sum;
}
十进制转化成其他进制就是这样呢,那其他进制转换成十进制呢?
其实都差不多
【比如我们将二进制数1001转换成十进制 ]
计算方法是1*2^0+1*2^3==9
那怎样用代码来实现他呢?
可以这样想,我们输入1001,计算机都读取的是数字1001,如果我们利用一个循环
for(i=1;num!=0;i++)
{
arr[i]=num%10;
num=num/10;
}
num是我们输入的数字
,经过循环后
(比如我们这里输入1001,第一次循环arr[1]=1;nun=100;
第二次arr[2]=0;num=10; 第三次arr[3]=0;num=1; 第四次arr[4]=1;num=0 ; 这时arr[]数组
里面就存放了我们输入的进制数 ,只需用我们刚开始写的long change()函数就能够转换成十进制
了呢 嘿嘿 )
用oth_to_ten表示将其他进制数转换成十进制数
oth_to_ten()
{
int base,i,num,arr[80];
long sum=0;
char ch;
printf("请输入你想要转换的进制");
scanf("%d",&base);
printf("请输入number:");
scanf("%d",&num);
for(i=1;num!=0;i++)
{
arr[i]=num%10;
num=num/10;
}
sum=change(arr,i-1,base);
printf("结果是:%ld\n",sum);
}
接下来就是主函数了
void main()
{
int flag=1;
while(flag!=0)
{
printf("\n1:十进制转换成其他进制\n");
printf("\n2:其他进制转换成十进制\n");
printf("\n0:退出\n");
printf("\n输入一个数:");
scanf("%d",&flag);
switch(flag)
{
case 1:ten_to_oth();break;
case 2:oth_to_ten();break;
case 0:break;
}
}
}
运行结果大概就是这样啦
1:十进制转换成其他进制
2:其他进制转换成十进制
输入一个数:1
请输入十进制数:40
请输入想要转换的进制数:2
结果是:
101000
1:十进制转换成其他进制
2:其他进制转换成十进制
输入一个数:2
请输入你想要转换的进制8
请输入number:1000
结果是:512
嘿哈,这就结束了呢,明天也要继续加油哇!!!~~~