PTA 1024 C++实现 科学计数法

文章目录

  • 题目
    • 1024 科学计数法 (20分)
  • 分析
  • 代码

题目

1024 科学计数法 (20分)

科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [±][1-9].[0-9]+E[±][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指数部分的正负号即使对正数也必定明确给出。

现以科学计数法的格式给出实数 A,请编写程序按普通数字表示法输出 A,并保证所有有效位都被保留。

输入格式:
每个输入包含 1 个测试用例,即一个以科学计数法表示的实数 A。该数字的存储长度不超过 9999 字节,且其指数的绝对值不超过 9999。

输出格式:
对每个测试用例,在一行中按普通数字表示法输出 A,并保证所有有效位都被保留,包括末尾的 0。

输入样例 1:

+1.23400E-03

输出样例 1:

0.00123400

输入样例 2:

-1.2E+10

输出样例 2:

-12000000000

分析

题目要求是把科学技术法的数换成一般形式输出。可把输入的数据分两部分储存。
数字和指数两部分。
可用string类和其相关函数。
再根据指数部分来移动小数点。

代码

#include
#include
using namespace std;
void swap(char& a, char& b)
{
	char t = a;
	a = b;
	b = t;
}
int main()
{
	string s,n,t;
	int z,i=0;
	cin >> s;
	while (s[i] != 'E') {
		n.push_back(s[i]);
		++i;
	}
	++i;
	while (i < (int)s.size()) {
		t.push_back(s[i]);
		++i;
	}
	i = 2;				//小数点位置
	z = atoi(t.data());
	while (z != 0) {
		if (z > 0) {     //指数大于零时
			if (i + 1 < (int)n.size()) {
				swap(n[i], n[i + 1]);
				++i;
				if (i + 1 == (int)n.size()) { //小数点到末尾是删除小数点
					n.pop_back();
					--i;
				}
			}
			else {		//小数点删除后的情况
				n.push_back('0');
				++i;
			}
			--z;
		}
		else {        //指数小于零时
			swap(n[1], n[2]);
			i = 0;
			n.insert(n.begin() + 1, '0');
			++z;
		}
	}
	if (n[0] == '+')n.erase(n.begin());//去掉+号
	cout << n;
	return 0;
}

aoti函数:

描述: C 库函数 int atoi(const char str) 把参数 str所指向的字符串转换为一个整数(类型为 int型)。
声明: 下面是 atoi() 函数的声明。
int atoi(const char
str)
参数: str – 要转换为整数的字符串。
返回值: 该函数返回转换后的长整数,如果没有执行有效的转换,则返回零。

你可能感兴趣的:(PTA,c++)