大数定律c语言编程,ACM基本输入输出(大数加法) (C/C++语言代码)

本文介绍了一种解决大数加法问题的方法,利用数组存储大数并进行逐位相加处理,支持不同长度的大数运算,适用于竞赛及实际应用。

解题思路:

如果想要通过系统测试,下面这段简单的代码足矣:#include 

int main()

{

int a,b;

while(~scanf("%d%d",&a,&b))

{

printf("%d\n\n",a+b);

}

return 0;

}

如果想要满足竞赛要求,就不得不提一下 大数加法了!

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

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

注意事项:

题目要求是空一行。所以最后得要2个回车或者两个endl。

参考代码:#include 

#include 

using namespace std;

string BigDataAdd(string,int,string,int);  //函数声明

int main()

{

string a,b;

while(cin>>a>>b)

{

if(a.size()

{

string temp=a;

a=b;

b=temp;

}

cout<

}

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++

程序测试:

15a56814d6890f2fd8686039c59196e8.png

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值