理财收益的计算 计算浮点数的n次方 1466

题目描述

老傻非常喜欢购买理财产品,而且这款理财产品被推销人员吹得特别高,对于贪财的老傻来说正中下怀,于是在心里盘算着买了它,自己就是亿万富豪,现需要你编写一个程序,帮老傻计算其收益,老傻的投入是R(0<R<99.999),经过n个月后其精确收益为R^n(R的n次方,n<=30)。

输入描述

第一行是测试数据组数T,每组数据占一行,对应于R和n

输出描述

对于每组测试数据,输出一行R^n的精确值。首尾无意义的0不要输出,如果是整数,则不要输出小数点。

样例输入

2

95.123 12

0.001 10

样例输出

548815620517731830194541.899025343415715973535967221869852721

.000000000000000000000000000001

这道题难度比较大

 1 #include<iostream>
 2 #include<string>
 3 using namespace std;
 4 int main(){
 5     int h,g;
 6     cin>>h;
 7     for(g=0;g<h;g++){
 8         string m;
 9         int n,len,i,j,p=0,nm=0,num,wd=1,c,s;
10         int ms[126]={0};
11         ms[0]=1;
12         cin>>m>>n;
13         len=m.length();
14         for(i=0;i<len;i++){
15             if(m[i]=='.'){
16                 p=len-1-i;
17                 p=p*n; 
18             }
19             else{
20                 num=m[i]-'0';
21                 nm=nm*10+num;
22             }
23         }
24         for(i=0;i<n;i++){
25             c=0;
26             for(j=0;j<wd;j++){
27                 s=ms[j]*nm+c;
28                 ms[j]=s%10;
29                 c=s/10;
30             }
31             while(c!=0){
32                 ms[j++]=c%10;
33                 c=c/10;
34             }
35             wd=j;
36         }
37         if(wd<=p){
38             cout<<'.';
39             for(i=0;i<p-wd;i++){
40                 cout<<'0';
41             }
42             for(i=wd-1;i>=0;i--){
43                 cout<<ms[i];
44             }
45         }
46         else{
47             i=0;
48             while(ms[i]==0&&i<p){
49                 i++;
50             }
51             for(j=wd-1;j>=i;j--){
52                 if(j+1==p){
53                     cout<<'.';
54                 }
55                 cout<<ms[j];
56             }
57         }
58         cout<<endl;
59     }
60     return 0;
61 }