POJ1001--Exponentiation

这道题本来很简单,就是OJ没按要求判断。。。

Problem: 1001 User: wjinkun
Memory: 384K Time: 0MS
Language: GCC Result: Accepted
 1 #include<stdio.h>
 2 #include<string.h>
 3 
 4 int main()
 5 {
 6     unsigned char R[6];
 7     int num2[6],num1[151],num3[151];                   //num2要取6,可能没有小数点
 8     int i,j,k,f,l,n,dot,weishu1,weishu2,temp;          //num1*num2=num3 num1的位数为weishu1 .....
 9     while(scanf("%s%d",R,&n)==2)
10     {
11         i=5;
12         j=0;
13         memset(num1,0,sizeof(num1));
14         memset(num2,0,sizeof(num2));
15         dot=0;                        //可能没有小数点
16         while(i>=0)
17         {
18             if(R[i]=='.')
19                 dot=5-(i--);            //小数点位置
20             else
21             {
22                 num2[j]=R[i]-48;
23                 num1[j++]=R[i--]-48;
24             }
25         }
26         dot=dot*n;
27         i=5;
28         while(i>=0 && num2[i]==0)      //i>=0判断越界!
29             i--;
30         weishu1=weishu2=i+1;
31         for(i=1; i<n; i++)            //n次幂
32         {
33             memset(num3,0,sizeof(num3));
34             for(j=0; j<weishu2+weishu1; j++)       //乘积后的位数
35             {
36                 for(k=0; k<weishu2&&j-k>=0; k++)   //从个位开始一位一位求
37                 {
38                     temp=num1[j-k]*num2[k]+num3[j];
39                     num3[j]=temp%10;
40                     num3[j+1]+=temp/10;
41                 }
42             }
43             j=150;
44             memcpy(num1,num3,sizeof(num1));
45             while(j>=0 && num1[j]==0)              //更新num1位数
46                 j--;
47             weishu1=j+1;
48         }
49         i=150;
50         while(i>=0 && num1[i]==0)                 //第一个不为零的数
51             i--;
52         f=i;
53         i=0;
54         while(i<=150 && num1[i]==0)                //最后一个不为零的数
55             i++;
56         l=i;
57         if(f==-1)                                  //0.0000
58             printf("%d",0);
59         else if(dot>f)                              //0.00044这种情况
60         {
61             printf("%c",'.');
62             for(i=dot-1; i>=l; i--)
63             {
64                 printf("%d",num1[i]);
65             }
66         }
67         else if(f>=dot && dot>l)                    //5.5这种情况
68         {
69             for(i=f; i>=dot; i--)
70             {
71                 printf("%d",num1[i]);
72             }
73             printf("%c",'.');
74             for(; i>=l; i--)
75             {
76                 printf("%d",num1[i]);
77             }
78         }
79         else if(dot<=l)                                //560这种情况
80         {
81             for(i=f; i>=dot; i--)
82             {
83                 printf("%d",num1[i]);
84             }
85         }
86         putchar('\n');
87     }
88     return 0;
89 }

Loading...
+

转载于:https://www.cnblogs.com/wjinkun/archive/2012/08/14/2638161.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值