题目链接
题目即乙级1024的英文版,大意不再赘述;
思路见指路1024
// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
#pragma warning(disable:4996);
#include <iostream>
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<string>
#include<stack>
#include<math.h>
#include<vector>
using namespace std;
int main() {
string s;
int len0 = 0;
cin >> s;
for(int i=0;i<s.length();i++)
if (s[i] == 'E')
{
for (int j = i + 2;j < s.length();j++)
{
len0 = len0 * 10 + (s[j] - '0');//计算需要增加的0的长度;
}
if (s[0] == '-')
cout << "-";//控制输出;
if (len0 == 0)//长度为0时,把e之前的输出即可;
{
for (int j = 1;j < i;j++)
cout << s[j];
}
else if (s[i + 1] == '+')//如果所要加的0个数不等于0,指数为正时;
{
cout << s[1];
if (len0 < i - 3)//指数不够把所有的小数化为正数时;
{
for (int j = 3;j < 3 + len0;j++)
{
cout << s[j];//转化为正数的部分;
}
cout << '.';
for (int j = 3 + len0;j < i;j++) cout << s[j];//仍是小数的部分;
}
else {//指数长度大于小数;
for (int j = 3;j < i;j++) cout << s[j];
for (int j = 1;j <= len0 - (i - 3);j++)cout << "0";
}
}
else {//指数为负的情况;
cout << "0.";//输出0和小数点
for (int j = 1;j < len0;j++) cout << "0";//输出0长度-1的0,有一位用在了去整数
cout << s[1];//输出原来的整数和小数;
for (int j = 3;j < i;j++) cout << s[j];
}
}
return 0;
}