题目链接

题目描述
请设计一个算法能够完成两个用字符串存储的整数进行相加操作,对非法的输入则返回error

#include<iostream>
#include<algorithm>
using namespace std;
bool judge_str(string str);
int main()
{
    string s1,s2;
    int len1,len2,len;
    while(cin>>s1>>s2)
    {
        if(!judge_str(s1) || !judge_str(s2)) 
        {
            cout<<"error"<<endl;
            continue;
        }
        reverse(s1.begin(),s1.end());
        reverse(s2.begin(),s2.end());
        len1=s1.length();
        len2=s2.length();
        len=len1<len2?len1:len2;
        int d=0,t1,t2;
        if(len1<=len2)                //将s1加到s2上 
        {
            int i;
            for(i=0;i<len;++i)
            {
                t1=s1[i]-'0';
                t2=s2[i]-'0';
                s2[i]=(t1+t2+d)%10+'0';
                d=(t1+t2+d)/10;    
            }
            for(;i<len2;++i)
            {
                t1=s2[i]-'0';
                s2[i]=(t1+d)%10+'0';
                d=(t1+t2)/10;
            }    
            if(d!=0)
            {
                s2+="1";
            }
            reverse(s2.begin(),s2.end());
            cout<<s2<<endl;
        }
        else                            //将s2加到s1上 
        {
            int i;
            for(i=0;i<len;++i)
            {
                t1=s1[i]-'0';
                t2=s2[i]-'0';
                s1[i]=(t1+t2+d)%10+'0';
                d=(t1+t2+d)/10;    
            }
            for(;i<len1;++i)
            {
                t1=s1[i]-'0';
                s1[i]=(t1+d)%10+'0';
                d=(t1+t2)/10;
            }    
            if(d!=0)
            {
                s1+="1";
            }
            reverse(s1.begin(),s1.end());
            cout<<s1<<endl;        
        }
    }
    return 0;
}
bool judge_str(string s)
{
    for(int i=0;i<s.length();++i)
    {
        if(s[i]<'0' || s[i]>'9') return false;
    }
    return true;
}
Last modification:September 21st, 2019 at 12:37 am
如果觉得我的文章对你有用,请随意赞赏