题解 | #大数加法#

大数加法

http://www.nowcoder.com/practice/11ae12e8c6fe48f883cad618c2e81475

下面贴出了可以在本机环境下运行的代码
对于本题,其实利用了最基本的加减法原理,每一位加每一位,然后判断是否产生进位,如果产生进位就在下一位的相加过程中加入进位影响,且当前位加法结果减去10;
由于字符串长度不一,suo'yi本题循环中,循环次数为最大的字符串长度,通过比较和置换,将t变为恒最大的;
本题利用了t当作中间变量,因为会发生结果比t的长度大1,所以最后还需要判断是否存在高位进位,如果是,高位补1。

#include<iostream>
#include<string>
#include<cmath>
using namespace std;
int main()
{
    string s,t,temp;
    cin>>s>>t;
    int jinwei=0;
    if(s.length()>t.length())
    {
        temp=t;
        t=s;
        s=temp;
    }
        int slen=s.length()-1;
        for(int i=t.length()-1;i>=0;i--)
        {
            if(slen>=0) //较小串未算完
            {
                if(t[i]+s[slen]+jinwei-10-'0'>='0')
                {
                    //进位
                    t[i]=t[i]+s[slen--]+jinwei-10-'0';
                    jinwei=1;
                    if(slen<0)
                        continue;
                }
                else
                {
                    t[i]=t[i]+s[slen--]+jinwei-'0';
                    jinwei=0;
                    if(slen<0)
                        continue;
                }
            }
            else //较小串已算完
            {
                if(t[i]+jinwei-10>='0')
                {
                    //进位
                    t[i]=t[i]+jinwei-10;
                    jinwei=1;
                }
                else
                {
                    t[i]=t[i]+jinwei;
                    jinwei=0;
                }
            }
        }
    if(jinwei==1)
        t="1"+t;
    cout<<t;
    return 0;
}
全部评论

相关推荐

那一天的Java_Java起来:他本来公司就是做这个的,不就是正常的游戏客户端和服务器开发,软硬件联动,有啥恶心不恶心的,提前告诉你就是怕你接受不了,接受不了就没必要再往后走流程浪费时间,虽然这公司是一坨。
点赞 评论 收藏
分享
爱吃肉的伊登在写日记:好棒,27届简历能做成这个样子,但是第一个项目感觉cover住难度还是不小的,特别是二面的时候肯定要对分布式系统设计这一块儿有高出正常面试者的水平才行
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务