题目
题目地址:
题解
模拟题,重点需要考虑到各种不同情况;简单来说一下;
因为输入格式固定,所以把不同的部分分别存储和处理可以在很大程度上简化运算;其中需要考虑最多的就是小数部分在指数不同时的处理方式,大略可以分为以下几种情况:
1. 指数为正,大于基数(也就是需要在之后补零)
2. 指数为正,小于基数 注:这种情况没有考虑到,一直有一个测试点过不了
3. 指数为负
最后需要说明一点,对于上述第一种情况,如果基数尾部有0,一定要考虑到并且做相应的处理;
代码
1 #include2 #include 3 #include 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 }