cpython3


私信TA

用户名:smartZhou

访问量:80392

签 名:

等  级
排  名 35
经  验 14006
参赛次数 1
文章发表 99
年  龄 0
在职情况 学生
学  校
专  业 计算机科学与技术

  自我简介:

本文部分内容引用以下优质文章:

ACM大数加法

解题思路:

如果不要求高精度,下面这段简单的代码足矣:

#include <stdio.h>

int main()
{
    int a,b;
    while(~scanf("%d%d",&a,&b))
    {
        printf("%d\n\n",a+b);
    }
    return 0;
}

   


如果想要满足高精度加法,就不得不提一下 大数加法了!



  基本思路为使用一个数组将所需要求得大数字存起来,然后进行倒序相加,发现超过十之后取模进位,再倒序输出去多余的0即可。

按从低位到高位的顺序两个数字的每一位对应相加,并加上低一位的进位(如果有进位的话),如果某一位对应的数字加起来大于10,就对10取模得到当前位上的数字,再向高位进1,然后再考虑更高一位数字的相加,依次类推,如果位数较长的那个数字的最高位还有进位,别忘记了位数还要增加1。


注意事项:

参考代码:

#include <iostream>
#include <string>
using namespace std;
string BigDataAdd(string,int,string,int);  //函数声明 
int main()
{
    string a,b;
    while(cin>>a>>b)
    {
        if(a.size()<b.size()) //这个if的作用是把长字符串放在a中!
        {
            string temp=a;
            a=b;
            b=temp;
        }
        cout<<BigDataAdd(a,a.size(),b,b.size())<<endl;     
    }
    return 0;
}
string BigDataAdd(string a,int lena,string b,int lenb)
{
    int aa,bb,sum,flag=0; //flag用来保存进位,默认为0
    while(lena>0)
    {
        aa=a[lena-1]-'0'; //a[lena-1]-'0'为把a字符串的最后一个字符转换成数字。
        if(lenb>0)        //判断b字符串是否有字符了,是否为空串。
            bb=b[lenb-1]-'0'; //b中还有字符,则将b字符串的最后一个字符转为数字
        else              //b为空串
            bb=0;             
        sum=aa+bb+flag;   
        if(sum>=10)       //和>=10,则产生进位
        {
            a[lena-1]='0'+sum%10; //sum%10取个位
            flag=1;               //进位标志设为1 
        }
        else 
        {
            a[lena-1]='0'+sum;
            flag=0;             
        }
        lena--;
        lenb--;
    }  
        if(flag==1)     //如果最高位前面还有进位的话
            a='1'+a;        //字符串追加   把1加在其前面
    return a;
}

编译环境:

Windows 10  China HuaWei Source Insight 4.0

Linux Debain Ubuntu/Kali g++

程序测试:

1546707299646531.png

 

0.0分

6 人评分

  评论区

  • «
  • »