大数运算小结代码
发布时间:2020-12-14 03:29:05 所属栏目:大数据 来源:网络整理
导读:大数加法 #include stdio.h#include string.h#define max 3000char a[max],b[max],c[max];int main(){int i,j,k,s,x,y,z;while(~scanf("%s%s",a,b)){i=strlen(a)-1;j=strlen(b)-1;k=s=0;while(i=0||j=0){if(i0)x=0;elsex=a[i]-'0';if(j0)y=0;elsey=b[j]-'0';
大数加法 #include <stdio.h> #include <string.h> #define max 3000 char a[max],b[max],c[max]; int main(){ int i,j,k,s,x,y,z; while(~scanf("%s%s",a,b)){ i=strlen(a)-1; j=strlen(b)-1; k=s=0; while(i>=0||j>=0){ if(i<0) x=0; else x=a[i]-'0'; if(j<0) y=0; else y=b[j]-'0'; z=x+y; if(s) z++; if(z>9){ s=1; z%=10; } else s=0; c[k++]=z+'0'; i--; j--; } if(s) c[k++]='1'; for(i=k-1;i>=0;i--) putchar(c[i]); printf("n"); } return 0; } 大数减法 #include <stdio.h> #include <string.h> #define max 300 char a[max],d[max]; int c[max]; int main(){ int i,z,flag; while(~scanf("%s%s",b)){ memset(c,sizeof(c)); k=flag=0; if(strcmp(a,b)==0){ printf("0n"); continue; } if(strcmp(a,b)<0){ flag=1; strcpy(d,a); strcpy(a,b); strcpy(b,d); } i=strlen(a)-1; j=strlen(b)-1; while(i>=0||j>=0){ if(i<0) x=0; else x=a[i]-'0'; if(j<0) y=0; else y=b[j]-'0'; z=x-y; c[k++]=z; i--; j--; } for(i=0;i<k;i++){ if(c[i]<0){ c[i]+=10; c[i+1]--; } } if(flag) printf("-"); flag=0; for(i=k-1;i>=0;i--){ if(!flag&&c[i]==0) continue; flag=1; printf("%d",c[i]); } printf("n"); } return 0; } 大数乘以小数 #include <stdio.h> #include <string.h> char a[3000]; int b[3000]; int main() { int len,add,i,n,flag,k; while(~scanf("%s%d",&n)) { len=strlen(a); add=flag=0; for(i=0;i<len;i++) b[len-i-1]=a[i]-'0'; for(i=0;i<len;i++){ k=b[i]*n+add; if(k>=10){ b[i]=k%10; add=k/10;flag=1; } else{ b[i]=k; flag=0; add=0; } } if(flag){ len=i+1; b[i]=add; } for(i=len-1;i>=0;i--) printf("%d",b[i]); printf("n"); } return 0; } 大数乘以大数 #include <stdio.h> #include <string.h> #define max 3000 char a[max],s[max]; int ans[max][max],t[max]={0}; void mul(){ int i,lena,lenb,k; lena=strlen(a);lenb=strlen(b); for(i=lena-1;i>=0;i--){ for(j=lenb-1;j>=0;j--) ans[lena-1-i][lenb-1-j]=(a[i]-'0')*(b[j]-'0'); } for(i=0;i<lena+lenb-1;i++){ if(i>=lenb) j=i-lenb+1; else j=0; for(;j<=i&&j<lena;j++) t[i]+=ans[j][i-j]; if(t[i]>=10){ t[i+1]=t[i]/10; t[i]%=10; } } if(t[lena+lenb-1]) k=lena+lenb-1; else k=lena+lenb-2; for(i=k;i>=0;i--) s[k-i]=t[i]+'0'; s[k+1]=' '; } int main(){ while(~scanf("%s%s",b)){ memset(t,sizeof(t)); mul(); puts(s); } return 0; } 大数阶乘 #include <stdio.h> #include <string.h> #define max 3000 int a[max]; int main(){ int len,c; while(~scanf("%d",&n)){ memset(a,sizeof(a)); a[0]=1; len=1;//表示位数 for(i=2;i<=n;i++){ c=0;//表示进位的数值 for(j=0;j<len;j++){ s=a[j]*i+c; c=s/10; a[j]=s%10; } while(c){ a[j++]=c%10; c/=10; len++; } } for(i=len-1;i>=0;i--) printf("%d",a[i]); printf("n"); } return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |