参考: Mr. He的高精度算法讲稿
高精度的存储结构:
#define maxn 5005
struct bign //高精度结构体
{
int len,z[maxn];
bign() //构造函数,初始化高精度变量的值为 0
{
len=1; //0是一位数
memset(z,0,sizeof(z)); //各位数字为0;
}
};
bign a,b; //定义了一个高精度变量
实现高精度运算的 13 大函数列表如下:
1、bign fuzhi(char *s) //赋值运算:把一个数字字符串赋值给高精度变量
bign fuzhi(char *s) //把一个字符串赋值给高精度
{
bign a;
a.len=strlen(s);
for(int i=0;i<a.len;i++)
a.z[a.len-1-i]=s[i]-48;
while(a.len>1 && a.z[a.len-1]==0)
a.len--; //去掉高位0
return a;
}
2、bign fuzhi(int num) //赋值运算:把一个整数赋给高精度变量
bign fuzhi(int num) //把一个整数赋值给高精度
{
char s[25];
sprintf(s,"%d",num);
return fuzhi(s);
}
3、void bign_in(bign &a) //高精度输入
void bign_in(bign &a) //注意:别名变量
{
scanf("%s",s);
a=fuzhi(s); //把子符串赋值给高精度变量
}
4、void bign_out(bign &a) //高精度输出
void bign_out(bign a)
{
for(int i=a.len-1;i>=0;i--)
printf("%d",a.z[i]);
pr