题目如下:
思考:
1.0527 这个例子发现 如果为0 代表十进制
2.需要去掉前面的0 如果是089 那么只需要输出 89
3.长度+1,因为999+111 会产生进位
4.两个字符串都是 0+0 这种情况需要考虑!
代码如下:
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> using namespace std; int main(){ string carry,m,n,c=""; cin>>carry>>m>>n; int len=max(m.size(),n.size())+1;//要多一个位置来存储进位 reverse(carry.begin(),carry.end()) ; reverse(m.begin(),m.end()); reverse(n.begin(),n.end()); int num=0; for(int i=0;i<len;i++) { int a=i<m.size()?m[i]-'0':0,b=i<n.size()?n[i]-'0':0,mod=10; if(i<carry.size()&&carry[i]-'0'!=0) mod=carry[i]-'0'; c+=(a+b+num)%mod+'0'; num=(a+b+num)/mod; } // cout<<c<<endl; while(c.back()=='0'&&c.size()>1) c.pop_back(); reverse(c.begin(),c.end()); for(auto i:c) cout<<i; return 0; }
参考:https://blog.csdn.net/richenyunqi/article/details/79810092