这是我使用的代码:
int cap(long n){
long sq = n*n;
string num = to_string(sq),s1,s2;
cout << num;
for(int i=1;i<=num.length();i++){
s1 = num.substr(0,i);
s2 = num.substr(i,num.length()-i);
string::size_type sz=0;
long n1 = stol (s1,&sz,0);
long n2 = stol (s2,&sz,0);
if(n1+n2==n){
return 1;
}
}
return 0;
}This is the error i get。对于这种类型的错误有什么提示吗?
发布于 2016-12-17 13:24:47
循环条件错误,请设置
for(int i=1;i<num.length();i++){而且程序不会崩溃。尽管如此,我不能断言结果是否符合预期。
发布于 2016-12-17 13:30:08
当为i=num.length()时,s2为空,因为
s2 = num.substr(i,num.length()-i); 与以下内容相同
s2 = num.substr(i, 0); //for i=num.length()
^~~~~length of substring is zero然后,此空字符串将作为s2传递给stol,从而导致错误"terminate called throwing an instance of 'std::invalid_argument'“
long n2 = stol (s2, &sz, 0);
^~~~~Empty string.Demo
https://stackoverflow.com/questions/41195538
复制相似问题