hdu 1063 Exponentiation

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1063

//注意边界,看了其他大神的代码,郁闷。。。

  1 #include<stdio.h>
  2 #include<string.h>
  3 #include<math.h>
  4 #include<stdlib.h>
  5 #include<iostream>
  6 using namespace std;
  7 #define N 200
  8 
  9 int main()
 10 {
 11     //freopen("in.txt","r",stdin);
 12     char input[10];
 13     int result[N];
 14     int i,n,r[N],t[N];
 15     while(~scanf("%s%d",input,&n))
 16     {
 17         memset(result,0,sizeof(result));
 18         memset(r,0,sizeof(r));
 19         memset(t,0,sizeof(t));
 20         t[0]=1;
 21         int j=0;
 22         for(i=5;i>=0;i--)
 23         {
 24             if(input[i]!='.')
 25             r[j++]=input[i]-'0';
 26         }
 27         for(i=0;i<=5;i++)
 28         {
 29             if(input[i]=='.')
 30             break;
 31         }
 32         int flag=5-i;//记录小数点的位置
 33         if(i==6)
 34         flag=0;
 35         if(n==0)
 36         {
 37             printf("1\n");
 38             continue;
 39         }
 40         int h=0;
 41         for(i=0;i<N;i++)
 42         h+=r[i];
 43         if(h==0)
 44         {
 45             printf("0\n");
 46             continue;
 47         }
 48         //printf("%d\n",flag);
 49         int k;
 50         for(k=0;k<n;k++)
 51         {
 52             for(i=0;i<5;i++)
 53                 for(j=0;j<N;j++)
 54                     result[j+i]+=t[j]*r[i];//运算,未进位。r为每次要乘的数值
 55             for(i=0;i<N;i++)
 56             {
 57                 if(result[i]>9)//进位
 58                 {
 59                     result[i+1]+=result[i]/10;
 60                     result[i]%=10;
 61                 }
 62             }
 63             for(j=0;j<N;j++)
 64             {
 65                 t[j]=result[j];//t为下一次运算保留数值
 66             }
 67             memset(result,0,sizeof(result));//result为本次运算得到的数值
 68         }
 69         for(i=0;i<N;i++)
 70         result[i]=t[i];
 71         int high,low;
 72         for(i=N-1;i>=0;i--)
 73             if(result[i])
 74             {
 75                 high=i;
 76                 break;
 77             }
 78         for(i=0;i<N;i++)
 79             if(result[i])
 80             {
 81                 low=i;
 82                 break;
 83             }
 84 //        printf("%d\n",high);
 85 //        printf("%d\n",low);
 86 //        for(i=N-1;i>=0;i--)
 87 //        printf("%d",result[i]);
 88 //        printf("\n");
 89           flag=flag*n-1;
 90 //        printf("%d\n",flag);
 91 
 92         if(flag>=high)
 93         {
 94             printf(".");
 95             for(i=flag;i>=low;i--)
 96             printf("%d",result[i]);
 97         }
 98         else if(flag<low)
 99         {
100             for(i=high;i>flag;i--)
101             printf("%d",result[i]);
102         }
103         else
104         {
105             for(i=high;i>=low;i--)
106             {
107                 if(i==flag)
108                 printf(".");
109                 printf("%d",result[i]);
110             }
111         }
112         printf("\n");
113     }
114     return 0;
115 }

 

转载于:https://www.cnblogs.com/xuesen1995/p/4339986.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值