题目

题目地址:PAT 乙级 1024

题解

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

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

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

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

3. 指数为负

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

代码

 #include <iostream>
#include <string>
#include <cmath>
using namespace std; int main() {
string str, xiaoshu, zhishu;
char c1, c2, zhenshu;
int len = , sum = , loc_E = ;
cin >> str;
c1 = str[];
zhenshu = str[];
for (int i = ; i < str.size(); i++) {
if (str[i] == 'E') {
loc_E = i;
break;
}
xiaoshu += str[i];
}
c2 = str[loc_E + ];
for (int i = loc_E + ; i < str.size(); i++)
zhishu += str[i];
if (c1 == '-')
cout << '-';
len = zhishu.size();
len--;
for (int i = ; i < zhishu.size(); i++) {
sum += (zhishu[i] - '') * pow(, len);
len--;
}
if (c2 == '+') {
int loc = xiaoshu.size() - ;
while (xiaoshu[loc] == '' && loc >= )
loc--;
cout << zhenshu;
if (sum < xiaoshu.size()) {
for (int i = ; i < xiaoshu.size(); i++) {
if (i == sum)
cout << '.';
cout << xiaoshu[i];
}
}
else {
for (int i = ; i <= loc; i++) {
cout << xiaoshu[i];
}
sum = sum - loc - ;
for (int i = ; i < sum; i++)
cout << '';
}
}
else {
cout << "0.";
for (int i = ; i < sum; i++)
cout << '';
cout << zhenshu << xiaoshu;
}
cout << endl; return ;
}
05-11 02:53