PAT 乙级 1024

题目

    题目地址:PAT 乙级 1024

 

题解

    模拟题,重点需要考虑到各种不同情况;简单来说一下;

    因为输入格式固定,所以把不同的部分分别存储和处理可以在很大程度上简化运算;其中需要考虑最多的就是小数部分在指数不同时的处理方式,大略可以分为以下几种情况:

        1. 指数为正,大于基数(也就是需要在之后补零)

        2. 指数为正,小于基数    注:这种情况没有考虑到,一直有一个测试点过不了

        3. 指数为负

    最后需要说明一点,对于上述第一种情况,如果基数尾部有0,一定要考虑到并且做相应的处理

 

代码

 1 #include <iostream>
 2 #include <string>
 3 #include <cmath>
 4 using namespace std;
 5 
 6 int main() {
 7     string str, xiaoshu, zhishu;
 8     char c1, c2, zhenshu;
 9     int len = 0, sum = 0, loc_E = 0;
10     cin >> str;
11     c1 = str[0];
12     zhenshu = str[1];
13     for (int i = 3; i < str.size(); i++) {
14         if (str[i] == 'E') {
15             loc_E = i;
16             break;
17         }
18         xiaoshu += str[i];
19     }
20     c2 = str[loc_E + 1];
21     for (int i = loc_E + 2; i < str.size(); i++)
22         zhishu += str[i];
23     if (c1 == '-')
24         cout << '-';
25     len = zhishu.size();
26     len--;
27     for (int i = 0; i < zhishu.size(); i++) {
28         sum += (zhishu[i] - '0') * pow(10, len);
29         len--;
30     }
31     if (c2 == '+') {
32         int loc = xiaoshu.size() - 1;
33         while (xiaoshu[loc] == '0' && loc >= 0)
34             loc--;
35         cout << zhenshu;
36         if (sum < xiaoshu.size()) {
37             for (int i = 0; i < xiaoshu.size(); i++) {
38                 if (i == sum)
39                     cout << '.';
40                 cout << xiaoshu[i];
41             }
42         }
43         else {
44             for (int i = 0; i <= loc; i++) {
45                 cout << xiaoshu[i];
46             }
47             sum = sum - loc - 1;
48             for (int i = 0; i < sum; i++)
49                 cout << '0';
50         }
51     }
52     else {
53         cout << "0.";
54         for (int i = 1; i < sum; i++)
55             cout << '0';
56         cout << zhenshu << xiaoshu;
57     }
58     cout << endl;
59 
60     return 0;
61 }

 

posted @ 2018-11-18 22:42  moujun  阅读(273)  评论(0编辑  收藏  举报