今天我们要讲的是最简单的a+b问题。。。
不好意思超链接打错了:a+b问题
————————————华丽的分割线————————————
没错我们今天要花一整天来讲愚蠢的A+B Problem。。。qwq
好了恢复正题
题目:见第二个超链接
为了模拟+运算,我们首先要算一算这个东西:
21324+98657(自己乱编的)
首先我们定义两个高精数:
高精数定义:
struct bignum
{
int len,s[maxn];//len=长度,s是储存数的主体
}a,b;
先想想在mian里面要怎么写
首先我们刚才那个算式是怎么算的?
是不是答案的第i位=a得第i位+b的第i位?
于是我们可以这样搞:
for(int i=0;i<c.len;++i)
{
c.s[i]=s[i]+a.s[i];
}
可是还是刚才的算式,用这个东西算第5位时。。。
9+2=11
所以第5位就是11?
好像这个程序少了点什么。。。
没错就是进位!!!
所以我们用x记录进位,把c.s[i]=s[i]+a.s[i];
变成c.s[i]=s[i]+a.s[i]+x;
就没了
这时候我们就要判断有没有进位了
有两种方法:
1。判断结果是否>10,若>10c.s[i+1]++;
2。记x=c.s[i]/10,c.s[i]%=10
我们通常用第二种
为什么?
因为以后弄乘法时第一种进位就没用了而写第二种进位可以直接复制粘贴~
要代码戳我
————————————华丽的分割线————————————
愉快的结束了~
下一章讲减法~