高精度计算

来源:互联网 发布:中金公司待遇 知乎 编辑:程序博客网 时间:2024/05/21 10:27
#include<stdio.h>#include<string.h>int c[1100];void f(char a[],char b[])//高精度加法{int i,j,k,t;for(i=strlen(b)-1,j=strlen(a)-1,k=0;i>=0;i--,j--,k++){c[k]+=b[i]-'0'+a[j]-'0';c[k+1]+=c[k]/10;c[k]%=10;}for(i=j;i>=0;i--){c[k]+=a[i]-'0';c[k+1]+=c[k]/10;c[k]%=10;k++;}}int main(){char a[1001],b[1001];int n,i,j,k,d;scanf("%d",&n);     for(d=1;d<=n;d++)     {     scanf("%s %s",a,b);     memset(c,0,sizeof(c));     if(d!=1)     printf("\n");     printf("Case %d:\n",d);     printf("%s + %s = ",a,b);     if(strlen(a)>strlen(b))     {     f(a,b);} else f(b,a); for(i=1100;;i--) { if(c[i]!=0) { for(j=i;j>=0;j--) {printf("%d",c[j]); } break; } }  printf("\n"); }}

#include<stdio.h>#include<string.h>int  c[5001]={0};char a[5001],b[5001];int k;void f(char a[],char b[])//大数相减 {int i,j;for(i=strlen(a)-1,j=strlen(b)-1,k=0;j>=0;i--,j--,k++){c[k]+=a[i]-'0'-(b[j]-'0');if(c[k]<0){c[k]+=10;c[k+1]--;}}for(j=i;j>=0;j--,k++){c[k]+=a[j]-'0';if(c[k]<0){c[k]+=10;c[k+1]--;}}}int main(){int i,j;while(~scanf("%s - %s",a,b)){memset(c,0,sizeof(c));if(strlen(a)>strlen(b))f(a,b);else if(strlen(b)>strlen(a)){printf("-");f(b,a);}else{if(strcmp(a,b)==0)printf("0\n");else if(strcmp(a,b)>0)f(a,b);else{f(b,a);printf("-");}}for(i=5000;;i--){if(c[i]!=0){for(j=i;j>=0;j--)printf("%d",c[j]);break;}}printf("\n");}}

#include<stdio.h>#include<string.h>int  c[5001];char a[5001],b[5001];//大数相乘int d;void f(char a[],char b[]){int k=0,i,j;for(i=strlen(a)-1;i>=0;i--){    d=k;for(j=strlen(b)-1;j>=0;j--){c[d]+=(a[i]-'0')*(b[j]-'0');d++;}k++;}}int main(){int i,j;   while(~scanf("%s * %s",a,b))   {   if(a[0]=='0'||b[0]=='0')   printf("0\n");   else   {   memset(c,0,sizeof(c));   f(a,b);   for(i=0;i<=d;i++)   {       c[i+1]+=c[i]/10;   c[i]%=10;   }for(i=5000;i>=0;i--){if(c[i]!=0){for(j=i;j>=0;j--){printf("%d",c[j]);}break;}}printf("\n");}}}