1.高精度加法
1.1 高精度加法
高精度运算的基本运算就是加和减。和算数的加减规则一样,模拟竖式计算,考虑错位运算与进位处理
#include <cstdio>
#include <cstring>
int main()
{
char a[202]={0}, b[202]={0};
scanf("%s%s", a, b);
int alen = strlen(a), blen = strlen(b), t = 0, i;
int a1[202]={0}, b1[202]={0};
for (i = 0; i < alen; i++) a1[i] = a[alen-1-i]-'0';//倒序输入
for (i = 0; i < blen; i++) b1[i] = b[blen-1-i]-'0';
alen = (alen > blen) ? alen : blen;//选择位数最长的
for (i = 0; i <= alen; i++)
t = a1[i]+b1[i], a1[i] = t%10, a1[i+1] += t/10;//t对应位上的数字的和,若超过了10,a1[i]只
// 保留个位,进位到a1[i+1]
while (!a1[i] && i) i--;
for(; i >= 0; i--) printf("%d", a1[i]);
return 0;
}
2.高精度减法
2.1 高精度减法
原理和加法一样,需要不过考虑的不是进位,而是借位。
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
char a[200]={0}, b[200]={0};
int a1[200]={0},b1[200]={0};
int i;
scanf("%s%s",a,b);
int alen=strlen(a),blen=strlen(b);
for( i=0;i<alen;i++) a1[i]=a[alen-1-i]-'0';
for( i=0; i<blen;i++) b1[i]=b[blen-1-i]-'0';
alen=(alen>blen) ? alen : blen;
int t=0;
for(i=0;i<=alen;i++)
{
t=a1[i]-b1[i];
t<0 ? (t+=10,a1[i+1]--) : t;
a1[i]=t;
}
while(!a1[i]&&i)
i--;
for(; i>=0;i--)
printf("%d",a1[i]);
return 0;
}
高精度除法
#include<cstdio>
#include<iostream>
using namespace std;
const int maxn=1010;
char a1[maxn],c1[maxn];
int a[maxn],c[maxn],x=0,b,lena,lenc,i;
int main()
{
memset(a,0,sizeof(a));
memset(c,0,sizeof(c));
gets(a1);
cin>>b;
lena=strlen(a1);
for(i=0;i<=lena-1;i++)
a[i+1]=a1[i]-48; //将高精度被除数放入a数组
for (i=1;i<=lena;i++) //按位相除
{
c[i]=(x*10+a[i])/b;
x=(x*10+a[i])%b;
}
lenc=1;
while (c[lenc]==0&&lenc<lena)
lenc++; //删除前导0
for(i=lenc;i<=lena;i++)
cout<<c[i];
cout<<endl;
return 0;
}