【PTA-乙级-详解】 1024科学计数法

【PTA-乙级-详解】 1024科学计数法

前言: 前三十题中 在我的印象里非常少的题是没有写直接搜解法 这个好像是第一个 也是前三十的倒数第二题,后面的反转链表实在不会。。。

#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打印出来 再把最先给出的小数除.之外的打印出来 即可    (其实这些规律都是很好找的 举几个例子即可)   若指数为正....  类似的分析方法 拆分为小的部分 然后用代码实现即可。

上一篇:Spark计算工作流


下一篇:dubbo异常Data length too large