#include<stdio.h> #include<math.h> #define max 500 int t[max]={0}; int v[max]={0}; int b[max]={0}; void total(int m[],int n[]) { int i,j,temp; for(i=0;i<max;i++) { t[i]=m[i]+n[i]; } for(i=0;i<max;i++) { if(t[i]>=10) { temp=t[i]; j=i; while(temp!=0) { if(i==j) t[j]=t[j]%10; else t[j]+=t[j]%10; j++; temp/=10; } } } } void yidong(int *a,int n,int m) { int i,j; for(i=m-1;i>=0;i--) { if(i>=n) a[i]=a[i-n]; else a[i]=0; } } int calc(int x,int y,int p[]){ int a,b,i,j,d,k,flag=0,m,temp; int abs[max][max]={0},l[max]={0},h[max]={0},n[max]={0}; if(x<10) { h[0]=x; } else{ temp=x; j=0; while(temp!=0) { h[j]=temp%10; temp/=10;j++; } } while(y>1) { for(i=0;i<max;i++) { l[i]=h[i]*x; } for(i=0;i<max;i++) { if(l[i]<10) abs[i][0]=l[i]; else{ temp=l[i]; j=0; while(temp!=0) { abs[i][j]=temp%10; temp=temp/10; j++; } } } for(i=0;i<max;i++) { yidong(abs[i],i,max); } for(i=0;i<max;i++) { for(j=0;j<max;j++) n[i]+=abs[j][i]; } for(i=0;i<max;i++) { if(n[i]>=10) { temp=n[i]; j=i; while(temp!=0) { if(i==j) n[i]%=10; else n[i]+=n[i]%10; j++; temp=temp/10; } } } for(i=0;i<max;i++) { h[i]=n[i]; n[i]=0; } y--; } for(i=0;i<max;i++) { p[i]=h[i]; } } int main() { int m,d,p,o,i; scanf("%d",&m); scanf("%d",&d); scanf("%d",&o); scanf("%d",&p); calc(m,d,v); calc(o,p,b); total(v,b); for(i=max-1;i>=0;i--) { if(t[i]!=0) break; } for(;i>=0;i--) printf("%d",t[i]); printf(" "); }
大数乘法和加法的模拟计算。。。。
代码比较乱。。。。。。。。。
主要思想还是数组保存大数以及进位计算。。。。
新学数组做参数,以及指针的小应用。。。。
长期不碰c做出来有点虚。。。。。