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
");
 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
");
 46             continue;
 47         }
 48         //printf("%d
",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
",high);
 85 //        printf("%d
",low);
 86 //        for(i=N-1;i>=0;i--)
 87 //        printf("%d",result[i]);
 88 //        printf("
");
 89           flag=flag*n-1;
 90 //        printf("%d
",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("
");
113     }
114     return 0;
115 }
原文地址:https://www.cnblogs.com/xuesen1995/p/4339986.html