当前位置: 代码迷 >> 综合 >> PTA 1022 D进制的A+B
  详细解决方案

PTA 1022 D进制的A+B

热度:62   发布时间:2023-12-01 17:17:58.0

输入两个非负 10 进制整数 A 和 B (≤230?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,over_num=0,i=0,num[100]={0};scanf("%d %d %d",&a,&b,&d);over_num=a+b;while(over_num>=d){num[i++]=over_num%d;//取余数 over_num/=d;	}num[i]=over_num%d;//因为上面i++有num[i]未取到余数,现在补上 for(;i>=0;i--) printf("%d",num[i]);//逆向循环输出 return 0;
}

注意输入0转化d进制的时候,输出0;

进制转化方法参考(转载10进制转8进制方法_百度知道 (baidu.com)

1、先来看八进制如何转换成十进制。其方法与二进制转换成十进制差不多:按权相加法,即将八进制每位上的数乘以位权(如8,64,512….),然后将得出来的数再加在一起。如将72.45转换为十进制。如图1所示:

2、 整数部分,除8取余法,每次将整数部分除以8,余数为该位权上的数,商继续除以8,余数又为上一个位权上的数,然后以此类推一直下去,直到商为零,最后从最后一个余数向前排列就可以了,如图2所示:

3、再看小数部分,与转二进制相同,这里是乘八取整法,也就是说小数部分乘以8,然后取整数部分,再让剩下的小数部分再乘以8,再取整数部分,……以此类推,一直乘到小数部分为零为止。例如0.703125,如图3所示:

4、小数部分乘以8,如图4所示,根据位数要求进行“3舍4入”。

5、这个是直接的方法,还有一个间接的方法捏?就是先把十进制转换为二进制,然后再由二进制转换为8进制,例如将十进制478.0245转为八进制。先转为二进制为:(478.125)10=(111011110.001)2 二进制再转为八进制为:(111011110.001)2=(736.1)8

咱们用图来解释一下,如图5所示为转换为二进制的介绍:

6、然后再将二进制转换为八进制,还是再温习一下二进制数与八进制数的对照表吧,如图6所示:

7、对照图表将二进制转换为八进制后的结果如图7所示: