poj 1001 Exponentiation 五个小时。。。回来重写
来源:互联网 发布:淘宝属于什么行业分类 编辑:程序博客网 时间:2024/05/18 13:06
#include <stdio.h>#include<string.h>const int MAXN=10000;int sum[MAXN],sum1[MAXN];void Carry(int len){ int c=0,i;for (i=0;i<len;i++) { int s=sum[i]+c; sum[i]=s%10;c=s/10; }}int main(int argc, char *argv[]){int i,j,cas,n,c,k,t;char ch1[MAXN],ch[10];int flag1,flag2,flag3;while(gets(ch)!=NULL){flag1=0,flag2=0,flag3=0; memset(ch1,0,sizeof(ch1)); memset(sum,0,sizeof(sum));for (i=0;ch[i]!=' ';i++) ch1[i]=ch[i];ch1[i]='\0';if(ch[7]==' ') n=0;//前六位是底数 后两位是指数 else if(ch[7]>='0' && ch[7]<='9') n=(ch[7]-48)*10;n=n+ch[8]-48;int len1=strlen(ch1);for (i=0;i<len1/2;i++){char change;change=ch1[i];ch1[i]=ch1[len1-i-1];ch1[len1-i-1]=change;}for (i=0;i<len1;i++) if(ch1[i]=='.') break;if (i<len1) t=n*i;//记录小数位数else t=0; if(n==1)//n==1的情况 { for (j=0;j<6;j++) if(ch1[j]!=0 && ch1[j]!='.' ) { flag3=1; break; }//是否为0.00000的情况 if(flag3) { for (j=0;j<len1;j++) if(ch1[j]!='0' && ch1[j]!=' ') break;int k1=j; for (j=len1-1;j>=0;j--) if(ch1[j]!='0') break;int k2=j;if(ch1[k1]=='.')//若为1.00000的情况 for (j=k2;ch1[j]!='.';j--) printf("%c",ch1[j]);//直接打整数 else for (j=k2;j>=k1;j--) printf("%c",ch1[j]); printf("\n"); } else printf("0\n");continue;}for (j=i;j<len1;j++) ch1[j]=ch1[j+1]; for (i=0;i<len1;i++) ch1[i]-=48; if(t) ch1[len1-1]=0; for (j=0;j<len1;j++) {c=0; for (int k=0;k<MAXN;k++) {int s=ch1[j]*ch1[k]+c;sum[k+j]+=s%10;c=s/10; }} Carry(MAXN);for (i=1;i<=n-2;i++){for (j=0;j<len1;j++){c=0;for (int k=0;k<MAXN;k++){int s=sum[k]*ch1[j]+c; sum1[k+j]+=s%10;c=s/10;}} for (cas=0;cas<MAXN;cas++) sum[cas]=sum1[cas];memset(sum1,0,sizeof(sum1)); Carry(MAXN);}c=0;for (i=MAXN-1;i>=0;i--) if(sum[i]) break; for (k=i;k>=0;k--)if(sum[k]!=0) { flag1=1 ; break; }if(flag1) { for (;i>t-1;i--) printf("%d",sum[i]); for (k=i;k>=0;k--) if(sum[k]!=0){ flag2=1;break;} if(flag2) { if(t) printf("."); int z=t; while(1) { if(z==(1+i)) break; printf("0"); z--; } if(t) { for (j=0;j<=i;j++) if(sum[j]) break; } for (;i>=j;i--) { printf("%d",sum[i]); } } printf("\n"); }else printf("0\n");}return 0;}