您的位置:首页 > 其它

高精度算法

2016-06-10 14:16 288 查看
加法

#include<stdio.h>
#include<string.h>
int la,lb,i,j=0,lm,n;
char a[501],b[501],c[502];
int main()
{
gets(a);
gets(b);
la=strlen(a);
lb=strlen(b);
lm=la>lb?la:lb;
for(i=1;i<=lm;i++)
{
n=j;
if (i<=la) n+=a[la-i]-'0';
if (i<=lb) n+=b[lb-i]-'0';
j=n/10;
n=n%10;
c[i-1]=n+'0';
}
if (j==1)
{
c[lm]='1';
lm++;
}
c[lm]='\0';
for(i=lm-1;i>=0;i--)
printf("%c",c[i]);
return 0;
}


减法

#include<stdio.h>
#include<string.h>
char a[101],b[101],c[101],d[101],e[101];
int i,la,lb,n,t;
int main()
{
gets(c);
gets(d);
if (strcmp(c,d)==0)
{
printf("0");
return 0;
}
la=strlen(c);
lb=strlen(d);
if (la>lb||(la==lb&&strcmp(c,d)>0))
{
strcpy(a,c);
strcpy(b,d);
}
else
{
printf("-");
strcpy(a,d);
strcpy(b,c);
}
la=strlen(a);
lb=strlen(b);
t=0;
for(i=1;i<=la;i++)
{
n=a[la-i]-48;
n=n-t;
if (lb>=i) n=n-b[lb-i]+48;
if (n<0)
{
n+=10;
t=1;
}
else t=0;
e[i-1]=n+48;
}
while(e[la-1]=='0')
la--;
for(i=la-1;i>=0;i--)
printf("%c",e[i]);
return 0;
}


乘法

#include<stdio.h>
#include<string.h>
char a1[50001],b1[50001];
int a[50001],b[50001],i,x,len,j,c[50001];
int main ()
{
gets(a1);
gets(b1);
a[0]=strlen(a1);b[0]=strlen(b1);
for (i=1;i<=a[0];++i)a[i]=a1[a[0]-i]-'0';
for (i=1;i<=b[0];++i)b[i]=b1[b[0]-i]-'0';
for (i=1;i<=a[0];++i)for (j=1;j<=b[0];++j)c[i+j-1]+=a[i]*b[j];
len=a[0]+b[0];
for (i=1;i<len;++i)if (c[i]>9){c[i+1]+=c[i]/10;c[i]%=10;}
while (c[len]==0&&len>1)len--;
for (i=len;i>=1;--i)printf("%d",c[i]);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  高精