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;
}
(编辑:西安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

