艹 这个题很蛋疼,搞了两天还是wa,没办法了,算法不是难事,主要是要考虑的情况,太多了- -#
真没脸贴代码。。。。这个代码是wa的O(∩_∩)O哈哈~
- /*
- * @problem R^n( 0.0 < R < 99.999 ) n 0 < n <= 25
- *
- * @description 高精度问题
- */
- #include <iostream>
- #include<string>
- #include <cstdlib>
- #include <cstring>
- using namespace std;
- int main() {
- int i,j,m;
- const int MAX=161;
- int n;
- string s,str;
- int tmp1,tmp2;
- char r[MAX],cnt[10];
- int len,dot,sum,ir,lastzero,lastzeropos,pre,prepos;
- while(cin>>s>>n){
- memset(r,'0',MAX*sizeof(char));
- lastzero=0;
- lastzeropos=MAX;
- tmp2=0;
- str=s;
- len=s.length();
- int pos=s.find('.');
- if(pos==-1)
- dot=-1;
- else{
- s.erase(pos,1);
- dot=(len-pos-1)*n;
- len=s.length();
- }
- strcpy(cnt,s.c_str());
- ir=atoi(cnt);
- for(i=len-1,sum=0,m=MAX-1;i>=0;i--,m--){
- r[m]=s[i];
- sum+=s[i]-'0';
- }
- if(sum==0)
- cout<<0<<endl;
- else if(n==0)
- cout<<1<<endl;
- else if(n==1){
- int l=str.length();
- pre=0;
- prepos=0;
- lastzero=0;
- lastzeropos=l;
- if(dot!=-1){
- for(i=0;i<pos;i++){
- pre+=str[i]-'0';
- if(pre!=0)
- prepos=i;
- }
- for(i=prepos;i<pos;i++)
- cout<<str[i];
- for(i=l-1;i>=pos;i--){
- lastzero+=str[i]-'0';
- if(lastzero==0)
- lastzeropos=i;
- }
- for(i=pos;i<lastzeropos;i++)
- cout<<str[i];
- }else{
- for(i=0;i<len;i++){
- pre+=str[i]-'0';
- if(pre!=0)
- prepos=i;
- }
- for(i=prepos;i<len;i++)
- cout<<str[i];
- }
- cout<<endl;
- }
- else{
- for(i=1;i<n;i++){
- m=MAX-1;
- for(j=0;j<len;j++,m--){
- tmp1=(r[m]-'0')*ir+tmp2;
- r[m]=(tmp1%10)+'0';
- tmp2=tmp1/10;
- }
- while((tmp2*10)/10){
- r[m]=(tmp2%10)+'0';
- tmp2=tmp2/10;
- m--;
- len++;
- }
- }
- if(dot!=-1){
- pos=m+1+len-dot;
- pre=0;
- prepos=m+1;
- for(i=m+1;i<pos;i++){
- pre+=r[i]-'0';
- if(pre!=0)
- prepos=i;
- }
- for(i=prepos;i<pos;i++)
- cout<<r[i];
- cout<<'.';
- for(i=MAX-1;i>=pos;i--){
- lastzero+=r[i]-'0';
- if(lastzero==0)
- lastzeropos=i;
- }
- for(i=pos;i<lastzeropos;i++)
- cout<<r[i];
- cout<<endl;
- }else{
- for(i=m+1;i<MAX;i++)
- cout<<r[i];
- }
- }
- }
- return 0;
- }