64,682
社区成员
发帖
与我相关
我的任务
分享
bool isAdditiveNumber(const string& num){
if(num.size()<3)return false;
int L,R,sum;
int ldlg;//位数
L =num[0]-'0', R=num[1]-'0';
for(int i=2;i<num.size()-1;i+=ldig){
sum=L+R;
ldig=static_cast<int>(log10(1.0*sum)+0.000001);//计算sum的位数ldig
int newR=0;
for(int j=0;j<ldlg&&i+j<num.size()-1;j++){//获取R后的ldig位数的数值
newR+=newR*10+(num[i+j]-'0');
}
if(newR!=sum)return false;//R后ldig位数的数值不等于L与R的和,则返回false
L=R;
R=newR;
}
return true;//所有的数值都是前两数值之和,则返回true
}
bool isAdditiveNumber(const string& num){
if(num.size()<3)return false;
int L,R,sum;
int ldlg;//位数
L =num[0]-'0', R=num[1]-'0';
for(int i=2;i<num.size()-1;i+=ldig){
sum=L+R;
ldig=static_cast<int>(log10(1.0*sum)+0.000001);//计算sum的位数ldig
int newR=0;
for(int j=0;j<ldlg&&i+j<num.size()-1;j++){//获取R后的ldig位数的数值
newR+=newR*10+(num[i+j]-'0');
}
if(newR!=sum)return false;//R后ldig位数的数值不等于L与R的和,则返回false
L=R;
R=newR;
}
return true;//所有的数值都是前两数值之和,则返回true
}
bool isAdditiveNumber(const string &num)
{
if(num.size()<3) return false;
int L,R,sum;
L =num[0]-'0', R=num[1]-'0';
for(int i=2,ldig=L+R>9 ? 2: 1;i<num.size();i+=ldig){
sum=L+R;
for(ldig=0;sum;sum/=10,++ldig);
sum=0;
for(int j=i;j<i+ldig;j++) sum =sum*10+num[j]-'0';
if(L+R!=sum) return false;
L =R, R=sum;
}
return true;
}