1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
| #include <iostream> #include <math.h>
using namespace std;
int main() { double a=0.0; int number[1000]={0},pointnumber=0,n=0,mi,temp=0,i,j,len,xiaoshudian=0; char str[20]={'\0'};
while(cin>>str>>mi) { if(mi==0) { cout<<1<<endl; continue; }
len=strlen(str); temp=0;
for(i=0;i<len;i++,temp++) { if(str[i]=='.') { temp--; while(str[len-1]=='0') len--; pointnumber=len-i-1;
} else { number[temp]=str[i]-'0'; n++; }
}
for(i=0;i<temp;i++) a+=number[i]*pow(10.0,temp-i-1);
for(i=0;i<n/2;i++) { temp=number[i]; number[i]=number[n-i-1]; number[n-i-1]=temp; }
for( i=0;i<mi-1;i++) {
for(j=0;j<=n;j++) { number[j]*=a; }
for(j=0;j<n;j++)
if(number[j]>=10) { number[j+1]=number[j+1]+number[j]/10; number[j]=number[j]%10; }
while(1) { if(number[n]<10) break; number[n+1]=number[n+1]+number[n]/10; number[n]=number[n]%10; ++n;
} }
for(i=0;i<=(n/2);i++) { temp=number[n-i]; number[n-i]=number[i]; number[i]=temp; }
pointnumber*=mi; temp=0;
if(n<pointnumber) { cout<<"."; for(i=0;i<=(pointnumber-n)-2;i++) cout<<0; }
for( i=0;i<=n;i++) { if(number[i]!=0) temp=1; if((n-i+1)==pointnumber) { temp=1; cout<<"."; } if(temp!=0) { cout<<number[i]; }
number[i]=0; }
cout<<endl;
strcat(str,"\0"); pointnumber=n=a=0; }
return 0; }
|