pat 乙级1074

题目如下:

思考:

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

无聊就学习 反正没事干
原文地址:https://www.cnblogs.com/miao-xixixi/p/12710734.html