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 }
浙公网安备 33010602011771号