a.length()返回值为无符号
string s = "";
for(int i = 0; i < s.length() - 1; ++i)
{
cout << "s.length - 1 = " << s.length()-1 << endl;
break;
}
输出结果:
s.length()-1 = 4294967295
强制类型转换一下。
string s = "";
for(int i = 0; i < (int)s.length() - 1; ++i)
{
cout << "(int)s.length - 1 = " << s.length()-1 << endl;
break;
}
输出结果:
因为(int)s.length - 1 = -1,所以无法进入循环。
如果a.length()<b.length(),相减后得到的值应该强制转换
#include <bits/stdc++.h>
using namespace std;
int main()
{
string a,b;
cin>>a>>b;
cout<<a.length() - b.length()<<endl;
return 0;
}
输入 123 123456
输出 4294967293
#include <bits/stdc++.h>
using namespace std;
int main()
{
string a,b;
cin>>a>>b;
cout<<(int)a.length() - (int)b.length()<<endl;
return 0;
}
输入 123 123456
输出 -3
题解
第一次交测试点2、5错误,原因是:当字符串B长度小于字符串A时,要补0对齐。
将运算后的结果存放在b中:①a>b(123 003 186)结果直接覆盖b②a<b(1234567 368782971 3695Q8118)b中剩余字符保留
#include <bits/stdc++.h>
using namespace std;
int main()
{
string a,b;
cin>>a>>b;
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
if (b.length() < a.length())
b.append(a.length() - b.length(), '0');
for(int i=0;i<a.length();i++)
{
if(i%2==0)
{
int v=((a[i]-'0')+(b[i]-'0'))%13;
if(v==10) b[i]='J';
else if(v==11) b[i]='Q';
else if(v==12) b[i]='K';
else b[i]=(v+'0');
}else
{
int v=(b[i]-'0')-(a[i]-'0')>=0?(b[i]-'0')-(a[i]-'0'):(b[i]-'0')-(a[i]-'0')+10;
b[i]=(v+'0');
}
}
reverse(b.begin(),b.end());
cout<<b<<endl;
return 0;
}