标签:
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1063
//注意边界,看了其他大神的代码,郁闷。。。
1 #include<stdio.h> 2 #include<string.h> 3 #include<math.h> 4 #include<stdlib.h> 5 #include<iostream> 6 using namespace std; 7 #define N 200 8 9 int main() 10 { 11 //freopen("in.txt","r",stdin); 12 char input[10]; 13 int result[N]; 14 int i,n,r[N],t[N]; 15 while(~scanf("%s%d",input,&n)) 16 { 17 memset(result,0,sizeof(result)); 18 memset(r,0,sizeof(r)); 19 memset(t,0,sizeof(t)); 20 t[0]=1; 21 int j=0; 22 for(i=5;i>=0;i--) 23 { 24 if(input[i]!=‘.‘) 25 r[j++]=input[i]-‘0‘; 26 } 27 for(i=0;i<=5;i++) 28 { 29 if(input[i]==‘.‘) 30 break; 31 } 32 int flag=5-i;//记录小数点的位置 33 if(i==6) 34 flag=0; 35 if(n==0) 36 { 37 printf("1\n"); 38 continue; 39 } 40 int h=0; 41 for(i=0;i<N;i++) 42 h+=r[i]; 43 if(h==0) 44 { 45 printf("0\n"); 46 continue; 47 } 48 //printf("%d\n",flag); 49 int k; 50 for(k=0;k<n;k++) 51 { 52 for(i=0;i<5;i++) 53 for(j=0;j<N;j++) 54 result[j+i]+=t[j]*r[i];//运算,未进位。r为每次要乘的数值 55 for(i=0;i<N;i++) 56 { 57 if(result[i]>9)//进位 58 { 59 result[i+1]+=result[i]/10; 60 result[i]%=10; 61 } 62 } 63 for(j=0;j<N;j++) 64 { 65 t[j]=result[j];//t为下一次运算保留数值 66 } 67 memset(result,0,sizeof(result));//result为本次运算得到的数值 68 } 69 for(i=0;i<N;i++) 70 result[i]=t[i]; 71 int high,low; 72 for(i=N-1;i>=0;i--) 73 if(result[i]) 74 { 75 high=i; 76 break; 77 } 78 for(i=0;i<N;i++) 79 if(result[i]) 80 { 81 low=i; 82 break; 83 } 84 // printf("%d\n",high); 85 // printf("%d\n",low); 86 // for(i=N-1;i>=0;i--) 87 // printf("%d",result[i]); 88 // printf("\n"); 89 flag=flag*n-1; 90 // printf("%d\n",flag); 91 92 if(flag>=high) 93 { 94 printf("."); 95 for(i=flag;i>=low;i--) 96 printf("%d",result[i]); 97 } 98 else if(flag<low) 99 { 100 for(i=high;i>flag;i--) 101 printf("%d",result[i]); 102 } 103 else 104 { 105 for(i=high;i>=low;i--) 106 { 107 if(i==flag) 108 printf("."); 109 printf("%d",result[i]); 110 } 111 } 112 printf("\n"); 113 } 114 return 0; 115 }
标签:
原文地址:http://www.cnblogs.com/xuesen1995/p/4339986.html