十进制数转换为其他进制
原题:
D进制的A+B
输入两个非负 10 进制整数 A 和 B (≤2³⁰−1),输出 A+B 的 D(1<D≤10)进制数。
输入格式:
输入在一行中依次给出 3 个整数 A、B 和 D。
输出格式:
输出 A+B 的 D 进制数。
输入样例:
123 456 8
输出样例:
1103
#include<stdio.h>
int main()
{
int A,B,D;
while(scanf("%d %d %d",&A,&B,&D)!=EOF)
{
//方法一:数组存放
int z[40];//z数组存放转换的其他进制的数值
int c;
c=A+B;
int num=0;
do
{
z[num++]=c%D;
c/=D;
}while(c!=0);
for(int i=num-1;i>=0;i--)
printf("%d",z[i]);
printf("\n");
方法二:
int sum=0,product=1;
c=A+B;
while(c!=0)
{
sum+=(c%D)*product;
c/=D;
product*=10;
}
printf("%d\n",sum);
}
return 0;
}
运行结果:
:
按理说每次输入一行,打印出的上下两行应该相同,但是在最后一次输入“123 132 16”的时候,输出的分别是1515和165
大一下学期的c++基础ppt中有个对十进制转八进制的方法的公式:
方法二就是用的这个公式,我考虑比起用数组不清楚数组长度而有限制不如这个方法好。
但是这个方法只能适用10进制转化为10进制以内的数。
10进制之外,如123+132=255转化为16进制
用这个方法会变成
(我都不敢相信我这是截图的csdn编辑面)
而实际就应该是1515
虽然这么说,但是由其他进制转换为10进制却可以用形似方法二的办法
csdn的格式好奇怪啊好奇怪啊好奇怪啊好奇怪啊