这段程序有什么问题:#include<iostream> #include<string> #include<cstring> #include<algorithm> #include<iomanip> char a[20]={0}; char b[20]={0}; int c[21]={0}; using namespace std; main(){ cin>>a>>b; for(int i=strlen(a)-1;i>=0;i++) a[i]=a[strlen(a)-1-i]; for(int i=strlen(b)-1;i>=0;i++) b[i]=b[strlen(b)-1-i]; //3 2 1 //6 5 4 for(int i=0;i<max(strlen(a),strlen(b));i++){ int sum=(a[i]+b[i]+sum)+'0'; if(sum>=10){ c[i]=sum%10; c[i+1]+=sum/10; sum/=10; } else{ c[i]=sum; } } for(int i=strlen(c)-1;i<=0;i--)cout<<c[i]; }
时间: 2023-07-14 12:02:14 浏览: 78
这段程序存在以下问题:
1. `main()` 函数应该声明返回类型为 `int`。
2. 在 `for` 循环中,对 `i` 的增量操作应为 `i--` 而不是 `i++`,否则会导致死循环。
3. 在 `char` 类型的数组中存储数字字符时,需要减去字符 `'0'` 的 ASCII 值,而不是加上 `'0'` 的 ASCII 值。
4. 在输出结果时,遍历 `c` 数组应该从 `strlen(c)-1` 到 `0`,而不是从 `strlen(c)-1` 到 `0`。
修正后的代码如下所示:
```cpp
#include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
#include<iomanip>
char a[20] = {0};
char b[20] = {0};
int c[21] = {0};
using namespace std;
int main() {
cin >> a >> b;
for (int i = strlen(a) - 1; i >= 0; i--) {
a[i] = a[strlen(a) - 1 - i];
}
for (int i = strlen(b) - 1; i >= 0; i--) {
b[i] = b[strlen(b) - 1 - i];
}
for (int i = 0; i < max(strlen(a), strlen(b)); i++) {
int sum = (a[i] - '0') + (b[i] - '0') + c[i];
if (sum >= 10) {
c[i] = sum % 10;
c[i + 1] += sum / 10;
sum /= 10;
} else {
c[i] = sum;
}
}
for (int i = strlen(c) - 1; i >= 0; i--) {
cout << c[i];
}
return 0;
}
```
请注意,以上修正只是针对程序中的问题进行了修改,可能还存在其他逻辑错误或需要改进的地方。
阅读全文