Exponentiation

 1 #include<iostream>
 2 #include <stdio.h>
 3 using namespace std;
 4 #define MOD 10
 5 #define END -1
 6 
 7 int bignum[1000] ;
 8 void MulBigSmall(int a[],int n)
 9 {
10     int i, cc=0;//进位标志
11     for(i=1; i<= a[0] ; i++)
12     {
13         a[i] = a[i] * n+ cc;
14         cc= a[i] / MOD;
15         a[i] %= MOD;
16     }
17     while(cc)
18     {
19         a[i++] = cc% MOD;
20         cc/= MOD;
21     }
22     a[0] = i-1;
23 }
24 void output(int pos)
25 {
26     int i, j;
27     if(bignum[0] > pos)//字符数大于小数数 
28     {
29         //输出小数点前的0 
30         for(j=0, i= bignum[0] ; j< bignum[0] - pos; j++, i--)
31             printf("%d", bignum[i]) ;
32         for(j=1; bignum[j] ==0; j++) bignum[j] = END;//去除尾0
33         if(bignum[i] == END|| i==0)
34             return;//整数
35         printf(".") ;
36         for(; bignum[i] != END&& i>=1; i--)
37             printf("%d", bignum[i]) ; 
38     }
39     
40     else//字符数小于或等于小数数 
41     {
42         printf(".") ;
43         for(i=0; i< pos- bignum[0] ; i++)
44             printf("0") ;
45         for(i=1; bignum[i] ==0; i++) bignum[i] = END;//去除0 
46         for(i= bignum[0] ; bignum[i] != END&& i>=1;i--)
47             printf("%d", bignum[i]) ;
48     }
49 }
50 int main()
51 {
52     int i, power, num, pos;
53     char str[100] ;
54     while(~scanf("%s %d", str, &power))
55     {
56         for(num=0, i=0, pos=5; i<6; i++)
57         {
58             if(str[i] =='.') pos= i;
59             else num= num*10+ str[i] -'0';
60         }
61         pos= (5- pos) * power;//计算有n位小数
62         bignum[0] = bignum[1] =1;
63         while(power--)
64             MulBigSmall(bignum,num);
65         output(pos) ;
66         printf("\n") ;
67     }
68     return 0;
69 }

属于大数处理的题目,考虑的真的有好多,自己写的时候基本上没出现错误了,可是精度发生了问题,当输入为1.0100 和1时,输出却为1.0099,还有就是输入为0.0100和1时,输出的是0.0099……,我表示不知道怎么改,后来改用字符串存,却发现很多小数点的问题,真的被玩爆了,还有值得注意的是,测数据有可能有:000000和一个整数,或者是0000.00和一个整数的组合,应该输出是0的,还有输入的第一个数有可能不只是在100以内。纠结了很久,就看了别人的AC代码,表示自己还得继续努力啊!

原文地址:https://www.cnblogs.com/ouyangduoduo/p/2558034.html