1022 D进制的A+B (20 分)
题目:1022 D进制的A+B (20 分)
思路:
- 首先根据A、B的取值范围,可知A+B不过2^31,所以转换成进制数时的最长长度为31。
- 转换成进制的数存进数组,然后反向输出。
- 要注意和为0的情况,当作特例处理,直接输出0,否则测试点3会错。
代码:
1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #include <sstream> 5 #include <cmath> 6 #include <algorithm> 7 #include <string> 8 #include <stack> 9 #include <queue> 10 #include <vector> 11 #include <map> 12 using namespace std; 13 14 int main() 15 { 16 int a, b, c, d, sys[100]; 17 scanf("%d%d%d", &a, &b, &d); 18 c = a + b; 19 if(c == 0) 20 printf("0"); 21 // printf("c = %d\n", c); 22 else 23 { 24 int cnt = 0; 25 while(c > 0) 26 { 27 sys[cnt++] = c % d; 28 c /= d; 29 // printf("hc = %d\n", c); 30 } 31 for(int i = cnt-1; i >= 0; i--) 32 printf("%d", sys[i]); 33 } 34 return 0; 35 }
总结:
刚开始一看题目,啊简单的基础题,没怎么想就直接动手了,结果栽了跟头,数组设小了……,改好后,测试点3一直错,啥原因啊,看了看范围,没考虑0的情况,考虑进去后ok。