(经典问题)大数加法

最近在找工作想把很多经典算法归一下档,把自己写的代码放在这里。

大数加法就是简单的用字符串模拟加法,但是代码不一定好写,写出来也不一定简洁,大数加法特别检验具体问题的抽象能力。这是也会发现,面向对象的设计方法比面向过程的方法更加符合人类思维。只是这些是以时间开销为代价的。

上代码

#include
#include
#include

using namespace std;

string sum(string s1,string s2){
    string temp;
//把s1中放入长的那个字符串,这是第一个不好考虑的问题。那就是长短不一
    if(s1.length()=0;i--,j--){
        s1[i]=char(s1[i]+(j>=0?s2[j]-'0':0)) ; //这里j判断不能放到for语句里面,因为j<0时还要检查进位,这也是第二个不好考虑的问题。
        
        if(s1[i]-'0'>=10){
            s1[i]=(s1[i]-'0')%10+'0';

            if(i>=1)
                s1[i-1]++;
            else
                s1='1'+s1;//第三个不好考虑的问题就是进位,可能会进到溢出数组,当溢出的时候做一个处理。这就是面向对象设计的优势。
        }

    }

    return s1;
}

int main(){
    string s1,s2;
    cin>>s1>>s2;

    string s3=sum(s1,s2);
    //清除前导0,这也是面向对象设计的优势
    while(s3[0]=='0'&&s3.length()>1)
        s3.erase(s3.begin());
    cout<

另外,这里是题目链接:http://bailian.openjudge.cn/practice/2981/

最后是我的一些思考。

想到加法自然会涉及到减法,乘法,除法。但是另外的三种运算是可以全部变成加法运算的,其中原理就是用“补码”,补码的数学原理可以看我的另一篇博客,https://blog.csdn.net/ACM5100/article/details/104493121

你可能感兴趣的:(ACM刷题笔记)