高精度计算(加法,减法,乘法)
(一)运算结果超出了整型、实型能表示的范围,肯定不能直接用一个数的形式来表示。能表示多个数的数据类型有两种:数组和字符串。
(二)结果长度:
加法:两数之和的位数最大为较大的数的位数加1
减法:两数之和的位数最大为较大的数的位数
乘法:两数位数之和
代码实现:
加法:
// 高精度加法
void add(int a[],int lena,int b[],int lenb)
{
int carry=0;//n代表进位
for(int i=0;i<=lena||i<=lenb;i++){
int k=a[i]+b[i]+carry;
a[i]=k%N;
carry=k/N;//N代表进制
}
}
减法:
// 高精度减法
void sub(int a[],int lena,int b[],int lenb)
{
int carry=0;
for(int i=0;i<=lena||i<=lenb;i++){
if(a[i]>=b[i]){
a[i]=a[i]-b[i]-carry;
carry=0;
}
if(a[i]<=b[i]){
a[i]=10+a[i]-b[i]-carry;
carry=1;
}
}
}
乘法:
void mul(int a[],int lena,int b[],int lenb) { int c[150]={0}; for(int i=0;i<lena;i++) for(int j=0;j<lenb;j++) c[i+j]+=a[i]*b[j]; for(int i=0;i<lena+lenb;i++){ c[i+1]+=c[i]/10; c[i]=c[i]%10; } for(int i=0;i<lena+lenb;i++) a[i]=c[i]; }