题目
题目地址: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 }