高精度加法
高精度的加法只有三步
1,以字符的形式输入
2,倒序转数字
3,数组加减与进位
#include<bits/stdc++.h>
using namespace std;
int a[510],b[510],c[510];
char a1[510],b1[510];
int main()
{
cin>>a1>>b1;
for(int i=strlen(a1)-1,j=0;i>=0;i--,j++)
{
a[j]=a1[i]-'0';
}
for(int i=strlen(b1)-1,j=0;i>=0;i--,j++)
{
b[j]=b1[i]-'0';
}
int tot=max(strlen(a1),strlen(b1));
for(int j=0;j<tot;j++)
{
c[j]+=(a[j]+b[j]);
if(c[j]>9)
{
c[j+1]+=c[j]/10;
c[j]%=10;
}
}
if(c[tot]!=0) tot++;
for(int i=tot-1;i>=0;i--)
cout<<c[i];
return 0;
}
高精度减法
高精度减法相对麻烦,需要判断两值的大小
其他的操作与加法相似
#include<bits/stdc++.h>
using namespace std;
int a[11000],b[11000],c[11000];
char a1[11000],b1[11000];
int main()
{
cin>>a1>>b1;//直接输入两个数
for(int i=strlen(a1)-1,j=0;i>=0;i--,j++)
a[j]=a1[i]-'0';
for(int i=strlen(b1)-1,j=0;i>=0;i--,j++)//将两个字符转化为数组族中的独立元素
b[j]=b1[i]-'0';
int tot=max(strlen(a1),strlen(b1));//记录两数的最大长度
int op=2;//初始默认操作2(即a>b)
if(strlen(b1)>strlen(a1))//通过长度判断a b的大小
{
for(int i=0;i<tot;i++)
swap(a[i],b[i]);
op=1;//将操作判别数更改为1
}
else if(strlen(a1)==strlen(b1))
{
for(int i=tot-1;i>=0;i--)//如果a b的长度一样,则判断高位的大小
{
if(a[i]==b[i]){
continue;
}
if(a[i]>b[i]) break;//证明a>b
if(a[i]<b[i])
{
for(int j=0;j<tot;j++)
swap(a[j],b[j]);
op=1;
break;
}
}
}
else op=2;
for(int i=0;i<tot;i++)
{
if(a[i]-b[i]<0)//借位
{
c[i]=a[i]+10-b[i];
a[i+1]--;
}
else c[i]=a[i]-b[i];
}
for(int i=tot-1;i>=0;i--)
{
if(c[i]==0)
{
if(i==0) break;
else tot--;//删除前位的零
}
else break;
}
if(op==1) cout<<"-";
for(int i=tot-1;i>=0;i--)
cout<<c[i];
return 0;
}