高精度加法
利用竖式计算的原理,通过处理进位,来计算高精度数据的和。
核心代码(处理进位):
int c[100];
void add(int a[],int b[]) //a,b,c都为数组,分别存储被加数、加数、结果
{
int i=1,x=0; //x是进位
while ((i<=a数组长度)||(i<=b数组的长度))
{
c[i]=a[i]+b[i]+x; //第i位相加并加上次的进位
x=c[i]/10; //向高位进位
c[i]%=10; //存储第i位的值
i++; //位置下标变量
}
}
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
char a1[201],b1[201];
int a[201],b[201],c[201],lena,lenb,lenc,i,x;
memset(a,0,sizeof(a)); //加数数组清零
memset(b,0,sizeof(b)); //加数数组清零
memset(c,0,sizeof(c)); //和数组清零
gets(a1); //输入其中一个加数
gets(b1); //输入另一个加数
lena=strlen(a1);
lenb=strlen(b1);
for(i=0;i<=lena-1;i++) a[lena-i]=a1[i]-48; //加数放入a数组
for(i=0;i<=lenb-1;i++) b[lenb-i]=b1[i]-48; //加数放入b数组
lenc=1;
x=0;
while(lenc<=lena||lenc<=lenb)
{
c[lenc]=a[lenc]+b[lenc]+x; //两数相加
x=c[lenc]/10; //进位处理
c[lenc]%=10;
lenc++;
}
c[lenc]=x;
if(x!=1) lenc--;
for (i=lenc;i>=1;i--)
if ((c[i]==0)&&(lenc>1)) lenc--;else break; //去掉前导“0”
for(i=lenc;i>=1;i--)
cout<<c[i]; //输出
cout<<endl;
return 0;
}
一步一步算法篇