2018年8月4日 下午3:54
POJ1001 Exponentiation【高精度】 - CSDN博客
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
| #include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #include<string> using namespace std; const int MAXN = 130; int na[MAXN]; string Mul(string a,int b) { string ans; int La = a.size(); fill(na,na+MAXN,0); for(int i = La-1; i >= 0; --i) na[La-i-1] = a[i] - '0'; int w = 0; for(int i = 0; i < La; ++i) { na[i] = na[i]*b + w; w = na[i] / 10; na[i] = na[i] % 10; } while(w) { na[La++] = w % 10; w /= 10; } La--; while(La >= 0) ans += na[La--] + '0'; return ans; } char s[7]; int main() { int N; while(~scanf("%s %d",s, &N)) { int pos = 0,num = 0; for(int i = 0; i < strlen(s); ++i) { if(s[i] == '.') { pos = (strlen(s)-i-1)*N; } else { num = num*10 + s[i] - '0'; } } string a; a += '1'; for(int i = 0; i < N; ++i) a = Mul(a,num); int len = a.size(); if(len <= pos) { printf("."); for(int i = 0; i < pos-len; ++i) printf("0"); cout << a << endl; } else { int j = len-1; while(a[j]=='0' && j > len-pos-1) j--; for(int i = 0; i <= j; ++i) { if(i == len-pos) printf("."); printf("%c",a[i]); } printf("\n"); } } return 0; }
|