这题真是超级大模拟。好繁琐,自己写的打数加法,乘法,写的比我大一时候写的要好很多,大一是借助C++里面的string来写的,这把只用了C,浇一次就ac了,挺开心的,不过写了2个小时啊。注意零的处理。大体思路就是先找出有多少位小数,要提前处理掉后面补充位置的零,然后把这个数转换成整数,做n次方,然后输出时候再查一下点的位置输出就好了。
1 #include <stdio.h> 2 #include <string.h> 3 #define mmax(a,b) (a)>(b):(a):(b) 4 void bigadd(char a[],char b[],char res[]){ 5 int la=strlen(a),lb=strlen(b); 6 int i,j,t,sign; 7 char tmp[100000]; 8 char zero[10000]="0000000000000000000"; 9 if(la<lb){ 10 strcpy(tmp,a); 11 strcpy(a,b); 12 strcpy(b,tmp); 13 la=strlen(a); 14 lb=strlen(b); 15 } 16 for(i=la-1,j=lb-1;i>=0&&j>=0;--i,--j){ 17 a[i]=a[i]+b[j]-'0'; 18 } 19 strcpy(zero+1,a); 20 strcpy(a,zero); 21 for(i=strlen(a)-1;i>0;--i){ 22 a[i-1]+=(a[i]-'0')/10; 23 a[i]=(a[i]-'0')%10+'0'; 24 } 25 for(i=0;i<strlen(a);++i){ 26 if(a[i]!='0') break; 27 } 28 if(i==strlen(a)) strcpy(res,"0"); 29 else strcpy(res,a+i); 30 return ; 31 } 32 void bigmul_one(char a[],char b,char res[]){ 33 char zero[10000]="000000000000000000000000000000000000000"; 34 strcpy(zero+1,a); 35 strcpy(a,zero); 36 int ji[10000]; 37 int i,n=b-'0',l=strlen(a); 38 for(i=0;i<l;++i){ 39 ji[i]=(a[i]-'0')*n; 40 } 41 ji[0]=0; 42 for(i=l-1;i>0;--i){ 43 ji[i-1]=ji[i]/10+ji[i-1]; 44 ji[i]=ji[i]%10; 45 } 46 a[0]='0'; 47 for(i=l-1;i>=0;--i){ 48 a[i]='0'+ji[i]; 49 } 50 for(i=0;i<l;++i){ 51 if(a[i]!='0') break; 52 } 53 if(i==l) strcpy(res,"0"); 54 else strcpy(res,a+i); 55 } 56 57 58 59 void bigmul(char a[],char b[],char res[]){ 60 int la,lb=strlen(b); 61 char r[10000]; 62 char tmp[10000]="00000000000000000000000000"; 63 char zero[20000]="0"; 64 char t1[10000],t2[1000000]; 65 char aaa[10000]; 66 char haha; 67 int i,j,t,cnt; 68 strcpy(res,"0"); 69 for(j=0;j<lb;++j){ 70 haha=b[j]; 71 strcpy(t1,a); 72 bigmul_one(t1,haha,t2);// t2 = res; 73 for(i=j+1;i<lb;++i) strcat(t2,"0"); 74 bigadd(res,t2,aaa); 75 strcpy(res,aaa); 76 } 77 // printf("res=%s ",res); 78 } 79 int main(){ 80 char a[10000],b[10000],res[10000]; 81 char tt[10000]; 82 int n,i,l; 83 int cnt; 84 int success; 85 while(~scanf("%s%d",a,&n)){ 86 success=0; 87 strcpy(res,"1"); 88 89 90 l=strlen(a); 91 92 for(i=l-1;i>=0;--i){ 93 if(a[i]!='0') break; 94 } 95 if(i<=0) i=0; 96 a[i+1]='