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。

posted @ 2019-07-26 15:08  Anzer  阅读(490)  评论(0编辑  收藏  举报