1116 多二了一点 - PAT (Basic Level) Practice (中文) (pintia.cn)
#include <iostream>
#include <string>
#include<cctype>
using namespace std;
int main() {
string s;
cin >> s;
int len = s.size();
// 判断是否是偶数位
if (len % 2 == 1)
cout << "Error: " << len << " digit(s)"<<endl;
else {
string A = s.substr(0, len / 2);
string B = s.substr(len / 2, len / 2);
int intA = stoi(A);
int intB = stoi(B);
if (intB - intA == 2) {
cout << "Yes: " << B << " - " << A << " = " << 2<<endl;
} else {
cout << "No: " << B << " - " << A << " != " << 2<<endl;
}
}
return 0;
}
原因在于用stoi()转了: stoi()转整数会去掉前导0,因此可能会出现这种情况:32-432.
并且我们还要确保除了最后一位外,A,B其他位都是相同的,这样才能确保B-A是2,我们可以用一个flag来做标记
#include<bits/stdc++.h>
using namespace std;
int main() {
string s;
cin >> s;
int flag=0;
int len = s.size();
// 判断是否是偶数位
if(s.size()&1) printf("Error: %d digit(s)",s.size());
else {
string A = s.substr(0, len / 2);
string B = s.substr(len / 2, len / 2);
int intA=A[A.size()-1]-'0';
int intB=B[B.size()-1]-'0';
for(int i=0;i<A.size()-1;i++)
{
if(A[i]!=B[i])
flag=1;
}
if (intB - intA == 2&&!flag) {
cout << "Yes: " << B << " - " << A << " = " << 2<<endl;
} else {
cout << "No: " << B << " - " << A << " != " << 2<<endl;
}
}
return 0;
}
第二种方法
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s; cin >> s;
int l=0, r=0;
if (s.size() % 2 == 1)printf("Error: %d digit(s)\n",s.size());
else
{
for (int i = 0; i < s.size(); i++)
{
if (i < s.size() / 2)
{
l += s[i]-'0';
}
else r += s[i]-'0';
}
if (l + 2 == r)cout << "Yes: " << s.substr(s.size() / 2) << " - " <<s.substr(0, s.size() / 2)<< " = " <<"2"<< endl;
else cout << "No: " <<s.substr(s.size() / 2) << " - " << s.substr(0, s.size() / 2) << " != " <<"2"<< endl;
}
return 0;
}