求教一个OJ中的小问题?才学c++两个多月 拼命刷题中 求帮助

BEST-CDB 2015-12-01 10:25:05
Additive number is a string whose digits can form additive sequence.

A valid additive sequence should contain at least three numbers. Except for the first two numbers, each subsequent number in the sequence must be the sum of the preceding two.

For example:
"112358" is an additive number because the digits can form an additive sequence: 1, 1, 2, 3, 5, 8.

1 + 1 = 2, 1 + 2 = 3, 2 + 3 = 5, 3 + 5 = 8
这是题目 大意就是证明这个数是不是additive number
以下是我的代码:
bool isAdditiveNumber(string num) {
string a,b,c,d;
int m=num.size();
if(m<=2)return false;
int i,j,k,n,g,na,nb,nc,l;
bool exist=false;
stringstream s;
for(i=1;i<=(m-1);i++){
for(j=0;j<=i;j++){
for(g=0;g<=(i-j);g++){
b+=num[j+g];
}
for(k=0;k<=j;k++){
a+=num[k];
}
}
na=std::atoi(a.c_str());
nb=std::atoi(b.c_str());
nc=na+nb;
s>>nc;
s<<c;
n=c.size();
for(k=0;k<=(n-1);k++){
if(num[i+k]!=c[k])break;
}
if(k==n){
exist=1;
break;
}
if(exist==1)break;
}
while((d!=c)||(l>=(m-1))){
i+=n;
na=nb;
nb=nc;
nc=nb+nc;
s>>nc;
s<<c;
n=c.size();
for(j=0;j<=(n-1);j++){
d+=num[i+j];
l=i+j;
}
}
if(d==c)return true;
else return false;
}
};
然后我提交我的代码 他说我的有误 但是我看不出来 哪位大神帮忙看看 谢谢了
...全文
113 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ranjio_z 2015-12-02
  • 打赏
  • 举报
回复

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
}
ranjio_z 2015-12-02
  • 打赏
  • 举报
回复

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
}
fly_dragon_fly 2015-12-02
  • 打赏
  • 举报
回复
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;
}
lm_whales 2015-12-01
  • 打赏
  • 举报
回复
最简单的就是逐一验证,如果没问题,那就是 例如 1,2,3 三个数 需要满足 1+2==3 (3-2 =1 个步骤)为真 1,2,3,5 四个数 需要满足 1+2==3 ,2+3==5 (4-2) = 2个步骤都为真 一旦有一个为假 ,那就不是 小于等于2 个数,显然不是
booirror 2015-12-01
  • 打赏
  • 举报
回复
这个代码写得很糟糕,面条代码,可读性差。 建议先看看Google的C++编程规范吧

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧