首页 > 代码库 > 1873 初中的算术

1873 初中的算术

 

Noder现在上初三了,正在开始复习中考。他每天要计算型如 (a× a× a× ?× a)na 的式子。 其中 0.0<a<99.999,0<n<26 。

虽然Noder会计算,但是老是算错,现在他想要你来写一个程序输出正确的结果,以便他核对。

 

Input
单组测试数据。第一行有一个实数a和一个整数n,中间用空格分开。 0.0 < a < 99.999,a总是占6位(a长度<=6),0<n<26。
Output
输出一个实数表示结果,不要输出前导0,后面多余的0也不要输出,如果是整数不要输出小数点。
Input示例
样例输入10.4321 20样例输入21.0100 12
Output示例
样例输出1.00000005148554641076956121994511276767154838481760200726351203835429763013462401样例输出21.126825030131969720661201

 

 

 

AC代码:

 1 #include<bits/stdc++.h> 2 using namespace std; 3  4 string multi(string a,string b)//乘法运算  5 { 6     int i,j,arr[200],len=a.length()+b.length(); 7     memset(arr,0,sizeof(arr)); 8     reverse(a.begin(),a.end());//倒序  9     reverse(b.begin(),b.end());10     for(i=0;i<a.length();i++)11     {12         for(j=0;j<b.length();j++)13         {14             arr[i+j]+=(a[i]-0)*(b[j]-0);//ab相乘15         }16     }17     for(i=0;i<len;i++)18     {19         arr[i+1]+=arr[i]/10;20         arr[i]%=10;21     }//进位 22     string ret=string(len,0);23     for(i=0;i<len;i++)24         ret[i]+=arr[i];25     reverse(ret.begin(),ret.end());26     return ret; 27 }28 29 string strpow(string x,int p)30 {31     string ret="1";32     while(p)33     {34         if(p&1)35             ret=multi(ret,x);36         x=multi(x,x);37         p>>=1; 38     }39     return ret;40 }41 42 int main()43 {44     string a;45     int n,i,index;46     while(cin>>a>>n)47     {48         index=a.find(.);49         if(index==-1)50             index=0;51         else52         {53             a=a.substr(0,index)+a.substr(index+1);//去掉小数点 54             index=(a.length()-index)*n;//小数点后的位数 55         }56         a=strpow(a,n);57         a=a.substr(0,a.length()-index)+"."+a.substr(a.length()-index);//完整的结果 58         for(i=0;i<a.length();i++)59         {60             if(a[i]!=0)61                 break;62         }63         a=a.substr(i);//除去前导0 64         for(i=a.length()-1;i>=0;i--)65         {66             if(a[i]==.)67             {68                 a=a.substr(0,i);69                 break;70             }71             else if(a[i]!=0)72             {73                 a=a.substr(0,i+1);74                 break;75             }76         }//除去尾0 77         cout<<a<<endl;78     }79 }

 

1873 初中的算术