POJ 1001 Exponentiation(大数)
Description
1.126825030131969720661201 本题代码poj上过了,hdu上过不了,不想再调了 这种题感觉没有什么算法可言,Java处理会好很多。主要是各种处理很烦 ,写上来主要纪念一下 AC代码: # include <cstdio> # include <cstring> using namespace std; char g_s[10]; int s1[200],s2[10],n; int judge(){ int n=0; for(int i=0; i<=5; i++){ if(g_s[i]=='0'){ n++; } } if(n>=5) return 1; return 0; } int cal_bit(){ int sum,cnt=0; int i=5; while(g_s[i]=='0'){ i--; } for( ; i>=1; i--){ if(g_s[i]=='.'){ return cnt; } else{ cnt++; } } return 0; } void cal_ch(){ int i=0,j=5,k; int cnt=0; while(g_s[i]=='.'||g_s[i]=='0'){ i++; } while(g_s[j]=='0'){ j--; } for(k=j; k>=i; k--){ if(g_s[k]=='.'){ continue; } else{ s1[cnt]=g_s[k]-'0'; s2[cnt]=g_s[k]-'0'; cnt++; } } } void cal_ans(){ int i,j,k; int end1=199,end2=9; int temp[200]; memset(temp,sizeof(temp)); while(s1[end1]==0){ end1--; } while(s2[end2]==0){ end2--; } for(i=0; i<=end2; i++){ for(k=0; k<=end1; k++){ temp[i+k]=temp[i+k]+s1[k]*s2[i]; } } int c=0; for(i=0; i<199; i++){ temp[i]=temp[i]+c; c=temp[i]/10; temp[i]=temp[i]%10; } for(i=0; i<200; i++){ s1[i]=temp[i]; } } int main(){ int bits,i,k; int ans[400]; while(scanf("%s %d",g_s,&n)!=EOF){ getchar(); if(n==0) { printf("1n"); continue; } if(judge()){ printf("0n"); continue; } memset(s1,sizeof(s1)); memset(s2,sizeof(s2)); cal_ch(); bits=cal_bit(); for(i=1; i<n; i++){ cal_ans(); } bits=bits*n; if(bits){ memset(ans,sizeof(ans)); int cnt; for(i=199; i>=0;){ if(s1[i]==0){ i--; } else{ break; } } j=200; for(; i>=0; i--){ ans[j++]=s1[i]; } cnt=j-bits; for(k=0; k<cnt; ){ if(ans[k]==0){ k++; } else{ break; } } if(!(k==cnt-1&&ans[k]==0)){ for( ; k<cnt; k++){ printf("%d",ans[k]); } } j--; for(; j>=cnt; ){ if(ans[i]==0){ j--; } else{ break; } } for(k=cnt; k<=j; k++){ if(k==cnt){ printf("."); } printf("%d",ans[k]); } printf("n"); } else{ for(i=199; i>=0; ){ if(s1[i]==0){ i--; } else{ break; } } for(j=i; j>=0; j--){ printf("%d",s1[j]); } printf("n"); } } return 0; } (编辑:西安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |