C++循环结构能解决这道题吗
时间: 2024-01-11 19:08:50 浏览: 67
可以的,循环结构也可以解决这道题。以下是C++的代码实现:
```cpp
#include <iostream>
#include <cstring>
using namespace std;
const int N = 1010;
int a[N], b[N], c[N];
char s1[N], s2[N], s3[N];
int main()
{
cin >> s1 >> s2;
int pos;
cin >> pos >> s3;
int len1 = strlen(s1), len2 = strlen(s2), len3 = strlen(s3);
for (int i = 0; i < len1; i ++ ) a[i] = s1[len1 - i - 1] - '0';
for (int i = 0; i < len2; i ++ ) b[i] = s2[len2 - i - 1] - '0';
for (int i = 0; i < len3; i ++ ) c[i] = s3[len3 - i - 1] - '0';
int i = 0, j = 0, k = 0, t = 0;
while (i < len1 || j < len2 || k < len3)
{
if (i >= pos && i - pos < len3) a[i] = c[i - pos];
int x = i < len1 ? a[i] : 0;
int y = j < len2 ? b[j] : 0;
int z = x + y + t;
c[k ++ ] = z % 10;
t = z / 10;
i ++ , j ++ ;
}
if (c[k - 1] > 0) cout << c[k - 1];
for (int i = k - 2; i >= 0; i -- ) cout << c[i];
cout << endl;
return 0;
}
```
思路如下:
首先按照题目要求读入漏抄的第一个加数、第二个加数、漏抄开始的位置和漏抄的内容。
然后将这三个数分别以倒序的形式存储到数组a、b、c中。
接着,我们使用三个指针i、j、k分别指向a、b、c数组的当前位置,使用进位t存储上一位的进位。
我们不断地将a[i]、b[j]和上一位的进位相加,求出当前位的结果,并更新进位t。如果当前位是漏抄的位置,则将a[i]赋值为c[i-pos]。最后将结果存储到数组c中,并更新指针i、j、k的位置。
最后,从高位到低位输出数组c中的结果即可。注意,如果最高位是0,则不要输出。
阅读全文