1001p

艹 这个题很蛋疼,搞了两天还是wa,没办法了,算法不是难事,主要是要考虑的情况,太多了- -#

真没脸贴代码。。。。这个代码是wa的O(∩_∩)O哈哈~

Code:
  1. /*  
  2.  * @problem R^n( 0.0 < R < 99.999 ) n 0 < n <= 25  
  3.  *  
  4.  * @description 高精度问题  
  5.  */  
  6. #include <iostream>   
  7. #include<string>   
  8. #include <cstdlib>   
  9. #include <cstring>   
  10. using namespace std;   
  11.   
  12. int main() {   
  13.     int i,j,m;   
  14.     const int MAX=161;   
  15.     int n;   
  16.     string s,str;   
  17.     int tmp1,tmp2;   
  18.     char r[MAX],cnt[10];   
  19.     int len,dot,sum,ir,lastzero,lastzeropos,pre,prepos;   
  20.     while(cin>>s>>n){   
  21.         memset(r,'0',MAX*sizeof(char));   
  22.         lastzero=0;   
  23.         lastzeropos=MAX;   
  24.         tmp2=0;   
  25.         str=s;   
  26.         len=s.length();   
  27.         int pos=s.find('.');   
  28.         if(pos==-1)   
  29.             dot=-1;   
  30.         else{   
  31.             s.erase(pos,1);   
  32.             dot=(len-pos-1)*n;   
  33.             len=s.length();   
  34.         }   
  35.   
  36.         strcpy(cnt,s.c_str());   
  37.         ir=atoi(cnt);   
  38.   
  39.         for(i=len-1,sum=0,m=MAX-1;i>=0;i--,m--){   
  40.             r[m]=s[i];   
  41.             sum+=s[i]-'0';   
  42.         }   
  43.   
  44.         if(sum==0)   
  45.             cout<<0<<endl;   
  46.         else if(n==0)   
  47.             cout<<1<<endl;   
  48.         else if(n==1){   
  49.             int l=str.length();   
  50.             pre=0;   
  51.             prepos=0;   
  52.             lastzero=0;   
  53.             lastzeropos=l;   
  54.             if(dot!=-1){   
  55.                 for(i=0;i<pos;i++){   
  56.                     pre+=str[i]-'0';   
  57.                     if(pre!=0)   
  58.                         prepos=i;   
  59.                 }   
  60.                 for(i=prepos;i<pos;i++)   
  61.                     cout<<str[i];   
  62.                 for(i=l-1;i>=pos;i--){   
  63.                     lastzero+=str[i]-'0';   
  64.                     if(lastzero==0)   
  65.                         lastzeropos=i;   
  66.                 }   
  67.                 for(i=pos;i<lastzeropos;i++)   
  68.                     cout<<str[i];   
  69.             }else{   
  70.                 for(i=0;i<len;i++){   
  71.                     pre+=str[i]-'0';   
  72.                     if(pre!=0)   
  73.                         prepos=i;   
  74.                 }   
  75.                 for(i=prepos;i<len;i++)   
  76.                     cout<<str[i];   
  77.             }   
  78.             cout<<endl;   
  79.         }   
  80.         else{   
  81.             for(i=1;i<n;i++){   
  82.                 m=MAX-1;   
  83.   
  84.                 for(j=0;j<len;j++,m--){   
  85.                     tmp1=(r[m]-'0')*ir+tmp2;   
  86.                     r[m]=(tmp1%10)+'0';   
  87.                     tmp2=tmp1/10;   
  88.                 }   
  89.   
  90.                 while((tmp2*10)/10){   
  91.                     r[m]=(tmp2%10)+'0';   
  92.                     tmp2=tmp2/10;   
  93.                     m--;   
  94.                     len++;   
  95.                 }   
  96.             }   
  97.             if(dot!=-1){   
  98.                 pos=m+1+len-dot;   
  99.                 pre=0;   
  100.                 prepos=m+1;   
  101.                 for(i=m+1;i<pos;i++){   
  102.                     pre+=r[i]-'0';   
  103.                     if(pre!=0)   
  104.                         prepos=i;   
  105.                 }   
  106.                 for(i=prepos;i<pos;i++)   
  107.                     cout<<r[i];   
  108.                 cout<<'.';   
  109.                 for(i=MAX-1;i>=pos;i--){   
  110.                     lastzero+=r[i]-'0';   
  111.                     if(lastzero==0)   
  112.                         lastzeropos=i;   
  113.                 }   
  114.                 for(i=pos;i<lastzeropos;i++)   
  115.                     cout<<r[i];   
  116.                 cout<<endl;   
  117.             }else{   
  118.                 for(i=m+1;i<MAX;i++)   
  119.                     cout<<r[i];   
  120.             }   
  121.         }   
  122.   
  123.   
  124.     }   
  125.     return 0;   
  126. }   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值