今天算是彻底进入了算法的学习,当然第一个接触的高精度,没什么好说的,先放几段自己的代码,高精度要多练习。
高精度加法:
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
char n1[100],n2[100];
int a[100],b[100],c[100],x,i,lena,lenb,lenc;
memset(a,0,sizeof(a));memset(b,0,sizeof(b));memset(c,0,sizeof(c));
gets(n1);gets(n2);
lena=strlen(n1);lenb=strlen(n2);
for(int i=0;i<=lena-1;++i) a[lena-i]=n1[i]-48;
for(int i=0;i<=lenb-1;++i) b[lenb-i]=n2[i]-48;
lenc=1;x=0;
while(lenc<=lena||lenc<=lenb)
{
c[lenc]=a[lenc]+b[lenc]+x;
x=c[lenc]/10;
c[lenc]=c[lenc]%10;
++lenc;
}
c[lenc]=x;
if(c[lenc]==0) --lenc;
for(int i=lenc;i>=1;--i)
cout<<c[i];
printf("\n");
return 0;
}
高精度减法:
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
int a[256],b[256],c[256],lena,lenb,lenc,i;
char n[256],n1[256],n2[256];
memset(a,0,sizeof(a));memset(b,0,sizeof(b));memset(c,0,sizeof(c));
gets(n1);gets(n2);
if(strlen(n1)<strlen(n2)||strlen(n1)==strlen(n2)&&strcmp(n1,n2)<0)
{
strcpy(n,n1);strcpy(n1,n2);strcpy(n2,n);
cout<<'-';
}
lena=strlen(n1);lenb=strlen(n2);
for(int i=0;i<=lena-1;++i) a[lena-i]=n1[i]-48;
for(int i=0;i<=lenb-1;++i) b[lenb-i]=n2[i]-48;
lenc=1;
while(lenc<=lena||lenc<=lenb)
{
if(a[lenc]<b[lenc])
{
a[lenc]+=10;
a[lenc+1]--;
}
c[lenc]=a[lenc]-b[lenc];
++lenc;
}
while((c[lenc]==0)&&lenc>1) --lenc;
for(int i=lenc;i>=1;--i) cout<<c[i];
printf("\n");
return 0;
}