提交时间:2024-08-20 20:54:51
运行 ID: 170024
#include <iostream> #include <string> using namespace std; void reverse(string&); int main() { string s , t, p ; string zero = "000000000000000000000000000000000000000000000000000000000000000"; int n,len,a, b, c; int i , j, k, carry; int h; char ch; string* r; while(cin>>s>>n) { int counter = 0; string temp; p =""; int nl = s.length(); h=0; for(i =nl-1;i>=0;i--) { if(s[nl-1] != '0') break; if(s[i] == '0') { h++; } else { break; } } s = s.substr(0,nl-h); for(i=0;i<nl;i++) { if(s[i] == '.') { counter = s.length()-1-i; temp = s.substr(0,i); s = temp + s.substr(i+1,nl-i); break; } } counter*=n; carry = 0; t = s ; len = t.length(); r = new string[len]; for(i = 0; i < n - 1; i++) { p=""; for(j=len-1; j>=0; j--) { r[j]=""; b = t[j] - '0'; int nlen = s.length(); for( k = nlen-1; k >= 0; k--) { a = s[k] - '0'; c = b * a + carry; carry = c / 10; ch = c % 10 + '0'; r[j] += ch; if( !k&&carry) { ch = carry + '0'; r[j] += ch; carry = 0; } } } for(k = len-1;k>=0;k--) { reverse(r[k]); if(k<len-1) r[k] += zero.substr(0,len-1 - k); } int width = r[0].length(); for(k = 1;k<len;k++) { r[k] = zero.substr(0,width-r[k].length()) + r[k]; } carry=0; b=0; for(j =width-1;j>=0; j--) { a=0; for(k=0;k<len;k++) { a += (r[k])[j] - '0'; } a += carry; carry = a / 10; b = a%10; ch = b + '0'; p+=ch; if(!j&&carry) p+=carry + '0'; } reverse(p); s = p; } if(counter) { temp = p.substr(0,p.length()-counter); if(temp != "0") p = temp + "." + p.substr(p.length()-counter,counter); else p = "." + p.substr(p.length()-counter,counter); } cout<<p<<endl; } system("pause"); return 0; } void reverse(string& s) { string t =s; int len = s.length(); for(int i = 0;i<len;i++) { s[i] = t[len-1-i]; } }