高精度算法就是当我们需要将超出我们能用整数类型表示的数字进行运算的时候所需要用到的算法。
其本质就是用字符串将数储存,然后根据算法的规则进行逐位运算。
以下为高精度加法的代码:
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
char m[100],n[100];
void jiafa(char x[],char y[])
{
int a[100],b[100],c[100],lena,lenb,sign=0; //a 加数数组 b 被加数数组 c和数组 sign标记位置
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
lena=strlen(x);
lenb=strlen(y);
for(int i=lena-1;i>=0;i--) //把x倒着存到a数组中
a[sign++]=x[i]-'0';
sign=0; //这步很重要 因为用同一个变量来作为标记,需要重置sign,也可另设变量完成下面的存入
for(int i=lenb-1;i>=0;i--) //把y倒着存到b数组中 此时a,b末位对齐
b[sign++]=y[i]-'0';
for(int i=0;i<=100;i++) //计算和
{
c[i]=c[i]+a[i]+b[i];
c[i+1]=c[i]/10; //当某位大于等于10时,向前进位
c[i]%=10; //当位保存尾数
}
for(int i=99;i>=0;i--)
{
if(c[i]!=0)
{
sign=i;
break; //从和数组从后往前扫,找到第一个不为0的位置
}
}
for(int i=sign;i>=0;i--) //从该位倒着输出,为和
cout<<c[i];
cout<<endl;
}
int main()
{
gets(m); //整段读入m数组
gets(n); //同上
jiafa(m,n); //调用子程序
return 0;
}