浙江财经大学
信息管理与工程学院

PAT(B) 1024. 科学计数法 (20)

本文由 Ocrosoft 于 2016-12-25 19:44:54 发表

1024. 科学计数法 (20)

时间限制
100 ms

内存限制
65536 kB

代码长度限制
8000 B

判题程序
Standard

作者
HOU, Qiming

科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][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
#include <set>
#include <map>
#include <list>
#include <cmath>
#include <stack>
#include <queue>
#include <ctime>
#include <string>
#include <cstdio>
#include <vector>
#include <cctype>
#include <climits>
#include <sstream>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <functional>
#define strend string::npos
#define ms(a) memset(a,0,sizeof(a))
#define rep(a,v,b) for(int a=v;a<b;a++)
#define repe(a,v,b) for(int a=v;a<=b;a++)
#define pre(a,v,b) for(int a=v;a>b;a--)
#define pree(a,v,b) for(int a=v;a>=b;a--)
#define lowbit(x) x&-x
typedef long long LL;
const LL LINF = LLONG_MAX / 2;
const int INF = INT_MAX / 2;
const int MAXN = 27 + 10;
const int MOD = 1000000007;
int gcd(int a, int b)
{
	if (!b)return a;
	return gcd(b, a%b);
}
/*(◕‿‿◕)(◕‿‿◕) (◕‿‿◕) (◕‿‿◕) (◕‿‿◕) (◕‿‿◕)*/
/*(◕‿‿◕) 签订契约,成为马猴烧酒吧 (◕‿‿◕)*/
/*(◕‿‿◕)(◕‿‿◕) (◕‿‿◕) (◕‿‿◕) (◕‿‿◕) (◕‿‿◕)*/
using namespace std;
int main()
{
	string s; cin >> s;
	string ss; 
	for (int i = 1; i < s.size(); i++)
	{
		if (s[i] == '.'||s[i]=='E')continue;
		if (s[i] == '+')
		{
			int ex = 0;
			for (int j = i + 1; j < s.size(); j++)
				ex = ex * 10 + (s[j] - '0');
			if (ex - i + 4 < 0)
			{
				ss.insert(ss.begin() + 3, '.');
				break;
			}
			for (int j = 0; j < ex-i+4; j++)
				ss.push_back('0');
			break;
		}
		if (s[i] == '-')
		{
			int ex = 0;
			for (int j = i + 1; j < s.size(); j++)
				ex = ex * 10 + (s[j] - '0');
			for (int j = 0; j < ex - 1; j++)
				ss.insert(ss.begin(), '0');
			ss = "0." + ss;
			break;
		}
		ss.push_back(s[i]);
	}
	if (s[0] == '+')cout << ss << endl;
	else cout << "-" << ss << endl;
	return 0;
}

欢迎分享与转载,请保留链接与出处。Ocrosoft » PAT(B) 1024. 科学计数法 (20)

点赞 (0)or拍砖 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址