您的位置:首页 > 其它

高精度加法模板

2017-04-03 21:51 190 查看
高精度就是很长的大数

#include <algorithm>
void add(char a[],char b[],char c[])//a+b=c
{
int i,e,d;
int n,m;
char temp;
n=strlen(a);
m=strlen(b);
for(i=0; i<n/2; i++)
{
temp=a[i];
a[i]=a[n-1-i];
a[n-1-i]=temp;
}//将a倒置,另外倒置可以写成另外的函数以便节省代码量,后面多次调用
for(i=0; i<m/2; i++)
{
temp=b[i];
b[i]=b[m-1-i];
b[m-1-i]=temp;
}//将b倒置

e=0;
for(i=0; i<n&&i<m; i++)
{
d=a[i]-'0'+b[i]-'0'+e;
e=d/10;
c[i]=d%10+'0';
}//进行模拟加法
if(i<m)
{
for(; i<m; i++)
{
d=b[i]-'0'+e;
e=d/10;
c[i]=d%10+'0';
}
}
else
{
for(; i<n; i++)
{
d=a[i]-'0'+e;
e=d/10;
c[i]=d%10+'0';
}
}//如果有一个数的位数较多,特殊处理
if(e) {c[i++]=e+'0';n++;m++;}//处理最后一位可以进位的情况
c[i]=0;

for(i=0; i<max(n,m)/2; i++)
{
temp=c[i];
c[i]=c[max(n,m)-1-i];
c[max(n,m)-1-i]=temp;
}//倒置

//此处添加适用于循环的代码
}

注意,以上模版只可用于一次高精度加法,多次循环需要把a和b数组倒置过来,

n=strlen(a);
m=strlen(b);
for(i=0; i<n/2; i++)
{
temp=a[i];
a[i]=a[n-1-i];
a[n-1-i]=temp;
}//将a倒置
for(i=0; i<m/2; i++)
{
temp=b[i];
b[i]=b[m-1-i];
b[m-1-i]=temp;
}//将b倒置

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: