Exponentiation |
Problems involving the computation of exact values of very large magnitude and precision are common. For example, the computation of the national debt is a taxing experience for many computer systems.
This problem requires that you write a program to compute the exact value of Rn where R is a real number (0.0 < R < 99.999) and n is an integer such that .
95.123 12 0.4321 20 5.1234 15 6.7592 9 98.999 10 1.0100 12
548815620517731830194541.899025343415715973535967221869852721 .00000005148554641076956121994511276767154838481760200726351203835429763013462401 43992025569.928573701266488041146654993318703707511666295476720493953024 29448126.764121021618164430206909037173276672 90429072743629540498.107596019456651774561044010001 1.126825030131969720661201基于大数的乘法(http://blog.csdn.net/u011863942/article/details/25001689)再做处理即可,注意两点:第一,0.0的指数需要单独处理;第二,末尾的零需要删除
#include<iostream> #include<sstream> #include<cstdio> #include<string> #include<cstring> using namespace std; #define MAX 1000000 int ans[MAX]; string Multi(string str1, string str2){ int i; stringstream s; string str; memset(ans, 0, sizeof(ans)); for(i = str1.size()-1; i >= 0; i--){ for(int j = str2.size()-1, p = str1.size()-1-i; j >=0; j--, p++){ ans[p] += (str1[i]-‘0‘)*(str2[j]-‘0‘); } } for(i = 0; i < MAX; i++){ ans[i+1] += ans[i]/10; ans[i] = ans[i]%10; } for(i = MAX-1; i >=0; i--){ if(ans[i]) break; } if(i == -1) return "0"; else{ for(int j = i; j >= 0; j--){ s << ans[j]; } s >> str; return str; } } int main(void){ string str, ans; int n; #ifndef ONLINE_JUDGE freopen("f:\\infile.txt", "r", stdin); #endif while(cin >> str >> n){ int dot, ansdot, i; ans = "1"; dot = str.find(‘.‘, 0); ansdot = (str.size()-1-dot)*n; str.erase(dot, 1); for(i = 0; i < n; i++){ ans = Multi(ans, str); } if(ans == "0"){ cout << ".0" << endl; continue; } else{ if(ans.size() < ansdot) ans.insert(0, ansdot-ans.size(), ‘0‘); ans.insert(ans.size()-ansdot, 1, ‘.‘); } for(i = ans.size()-1; i >=0; i--){ if(ans[i] != ‘0‘) break; } ans.erase(ans.begin()+i+1, ans.end()); cout << ans << endl; } return 0; }
uva748 - Exponentiation,布布扣,bubuko.com
原文:http://blog.csdn.net/u011863942/article/details/25001949