- 题目描述:
-
输入两个不超过整型定义的非负10进制整数A和B(<=231-1),输出A+B的m (1 < m <10)进制数。
- 输入:
-
输入格式:测试输入包含若干测试用例。每个测试用例占一行,给出m和A,B的值。
当m为0时输入结束。
- 输出:
-
输出格式:每个测试用例的输出占一行,输出A+B的m进制数。
- 样例输入:
-
8 1300 48 2 1 7 0
- 样例输出:
-
2504 1000
做这道题的代码一开始WA,代码是这样的1 #include <cstdio> 2 #include <cstdlib> 3 #include <cstring> 4 #include <string> 5 #define MAX 1005 6 int ans[MAX]; 7 int main(int argc, char const *argv[]) 8 { 9 long long int m; 10 long long int A, B, C; 11 scanf("%lld",&m); 12 while(m != 0) { 13 scanf("%lld %lld",&A,&B); 14 C = A + B; 15 int wtemp = 0; 16 while(C != 0) { 17 int bit = C % m; 18 C = C / m; 19 ans[wtemp] = bit; 20 wtemp++; 21 } 22 for(int i = wtemp -1; i >= 0; i--) { 23 printf("%d",ans[i]); 24 } 25 printf(" "); 26 27 scanf("%d",&m); 28 } 29 30 return 0; 31 } 32
该代码几乎可以处理所有情况,除了一种,就是和为0的情况
修改如下:
1 #include <cstdio> 2 #include <cstdlib> 3 #include <cstring> 4 #include <string> 5 #define MAX 1005 6 int ans[MAX]; 7 int main(int argc, char const *argv[]) 8 { 9 int m; 10 long long int A, B, C; 11 scanf("%lld",&m); 12 while(m != 0) { 13 scanf("%lld %lld",&A,&B); 14 C = A + B; 15 int wtemp = 0; 16 while(C >= m) { 17 int bit = C % m; 18 C = C / m; 19 ans[wtemp] = bit; 20 wtemp++; 21 } 22 ans[wtemp] = C; 23 wtemp++; 24 for(int i = wtemp -1; i >= 0; i--) { 25 printf("%d",ans[i]); 26 } 27 printf(" "); 28 29 scanf("%d",&m); 30 } 31 32 return 0; 33 } 34
这种问题要引起高度注意!!!!!!!!!!!!!!