uva 748 - Exponentiation

这是计算指数的,刚开始不知道该怎么做,然后查看了一些网上的代码,只要把小数点去掉后,接下来就是大数相乘了

我在做的时候一下几点要注意

1.小数点位数要记住

2.像0.0100后面的两个0应该去掉

在做的时候还wa了一次,主要是格式没对,它要求前置0和后尾0 都去掉

下面给出accept的代码

 1 #include<iostream>
 2 #include<stdio.h>
 3 using namespace std;
 4 #define  MAXN 300
 5 struct bign{
 6     int len,s[MAXN];
 7     bign(){
 8         len=1;
 9         for(int i=0;i<MAXN;i++)
10             s[i]=0;
11     }
12     bign(string l){
13         len=l.size();
14         for(int i=l.size()-1,j=0;i>=0;i--,j++)
15             s[j]=l[i]-'0';
16     }
17     void clean(){
18         while(len>1&&!s[len-1]){len--;}
19     }
20     struct bign operator *(const struct bign& b){
21         struct bign c;
22         c.len=len+b.len;
23         for(int i=0;i<len;i++)
24             for(int j=0;j<b.len;j++)
25                 c.s[i+j]+=s[i]*b.s[j];
26         for(int i=0;i<c.len;i++){
27             c.s[i+1]+=c.s[i]/10;
28             c.s[i]%=10;
29         }
30         c.clean();
31         return c;
32     }
33 };
34 int main(){
35     char s[100];
36     int n;
37     while(scanf("%s %d",s,&n)!=EOF){    
38         string l=s;
39         int start,dotlen;
40         if((start=l.find(".",0))>=0){
41             int i=l.size()-1;
42             while(l[i]=='0'&&i>start){
43                 l.erase(i,1);
44                 i--;
45             }
46             l.erase(start,1);
47             dotlen=(l.size()-start)*n;
48         }
49         start=0;
50         
51         struct bign sumn(l);
52         struct bign temp(l);
53         for(int i=0;i<n-1;i++){
54             sumn=sumn*temp;
55         }
56         
57         if(sumn.len<dotlen){
58             cout<<".";
59             for(int i=0;i<dotlen-sumn.len;i++)
60                 cout<<"0";
61             for(int i=sumn.len-1;i>=0;i--){
62                 if(i==dotlen-1)
63                     cout<<".";
64                 cout<<sumn.s[i];
65             }
66             cout<<endl;
67         }
68         else{
69             for(int i=sumn.len-1;i>=0;i--){
70                 if(i==dotlen-1)
71                     cout<<".";
72                 cout<<sumn.s[i];
73             }
74             cout<<endl;
75         }
76     }
77     
78 }

 

posted on 2013-12-23 12:22  云在心  阅读(183)  评论(0)    收藏  举报

导航