前言: 前三十题中 在我的印象里非常少的题是没有写直接搜解法 这个好像是第一个 也是前三十的倒数第二题,后面的反转链表实在不会。。。
#include<iostream>
using namespace std;
// +1.23400E-03 0.00123400 -1.2E+10 -12000000000
int main()
{
char arr[10000];
cin >> arr;
// 先把E的下标记录下来
int e = 1;
while (arr[++e] != 'E')
;
int index = 0;
for (int i = e + 2; arr[i] != '\0'; i++)
{
index *= 10;
index += arr[i] - '0';
}
// index 存储的是指数 e存储的是E的下标位置
if (arr[0] == '-')
cout << '-';
if (!index)
{
for (int i = 1; i < e; i++)
{
cout << arr[i];
}
return 0;
}
if (arr[e + 1] == '-')
{
cout << "0.";
while (index - 1)
{
cout << '0';
index--;
}
for (int i = 1; i < e; i++)
{
if (arr[i] != '.')
{
cout << arr[i];
}
}
}
else
{
// +1.23400E-03 0.00123400 -1.2E+10 -12000000000
cout << arr[1];
int i = 0;
for (i = 3; i < index + 3; i++)
{
if (i < e)
{
cout << arr[i];
}
else
cout << 0;
}
if (i < e)
{
if (i == index + 3)
cout << ".";
cout << arr[i];
}
// 1.3333333E+3
}
return 0;
}
fansi:其实并不是特别难的一个题,遇到这种的 首先 用字符,浮点型等组合起来进行输入然后处理是非常不方便且不可行的,用数组是最好的。
输入之后找规律:E只有一个 E后面是指数部分 中间还有一个+- 开头必定有一个+-
可以用一个整型index存储指数部分 按照指数index对前面的小数进行处理 分类:若指数为负 则前面会出现0.xxx的情况 且 指数为-1 则为0.xxxx 指数为-2 为0.0xxx xxx为最先给出的小数部分 按照指数的大小把前面的0.00打印出来 再把最先给出的小数除.之外的打印出来 即可 (其实这些规律都是很好找的 举几个例子即可) 若指数为正.... 类似的分析方法 拆分为小的部分 然后用代码实现即可。