#include<bits/stdc++.h> using namespace std; int main() { long long n,m; cin>>n>>m; int s1=0,s2=0,max; int a[1001]={0},b[1001]={0}; while(n) { a[s1++]=n%10; n/=10; } while(m) { b[s2++]=m%10; m/=10; } if(s1>s2) max=s1; else max=s2; for(int i=0;i<max;i++) { if((i+1)%2!=0) { a[i]=a[i]+b[i]; a[i]=a[i]%13; } else { a[i]=b[i]-a[i]; if(a[i]<0) a[i]+=10; } } for(int i=max-1;i>=0;i--) { if(i>0) { if(a[i]==10) cout<<"J"; else if(a[i]==11) cout<<"Q"; else if(a[i]==12) cout<<"K"; else cout<<a[i]; } else { if(a[i]==10) cout<<"J"; else if(a[i]==11) cout<<"Q"; else if(a[i]==12) cout<<"K"; else cout<<a[i]<<endl; } } return 0; }改错
时间: 2024-01-23 21:02:23 浏览: 91
这段代码的问题在于对 long long 类型的变量 n 和 m 没有进行输入检查,当输入的 n 或 m 超过 int 类型的范围时会导致输入错误。因此建议将输入语句更改为:
```cpp
#include<bits/stdc++.h>
using namespace std;
int main()
{
string sn, sm;
cin >> sn >> sm;
int s1 = sn.size(), s2 = sm.size(), max = max(s1, s2);
int a[1001] = {0}, b[1001] = {0};
for (int i = 0; i < s1; i++)
a[i] = sn[s1 - i - 1] - '0';
for (int i = 0; i < s2; i++)
b[i] = sm[s2 - i - 1] - '0';
// ...
}
```
此外,当计算 a[i] 和 b[i] 的和时,应该先将 a[i] 和 b[i] 相加再取模,而不是先取模再相加。因此将代码更改为:
```cpp
for (int i = 0; i < max; i++)
{
if ((i + 1) % 2 != 0)
{
a[i] += b[i];
a[i] %= 13;
}
else
{
int temp = b[i] - a[i];
if (temp < 0)
temp += 10;
a[i] = temp;
}
}
```
最后,输出时应该先输出前导零,再输出字母 J、Q、K,否则会导致错误。因此将代码更改为:
```cpp
for (int i = max - 1; i >= 0; i--)
{
if (i > 0)
{
if (a[i] == 10)
cout << "J";
else if (a[i] == 11)
cout << "Q";
else if (a[i] == 12)
cout << "K";
else
cout << a[i];
}
else
{
cout << a[i] << endl;
}
}
```
阅读全文