• PAT 乙级真题 1014.科学计数法


    PAT 乙级真题 1014.科学计数法

    题目描述

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

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

    输入格式

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

    输出格式

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

    输入样例

    +1.23400E-03
    

    输出样例

    0.00123400
    

    题目思路

    暴力算法,E后为负数时输出时往前面补0,E后为正数时,将字符数组向后移位处理。

    #include<iostream>
    #include<algorithm>
    using namespace std;
    
    const int N = 1e4 + 10;
    char a[N], b[N];
    
    int main()
    {
    	scanf("%s", a);
    	if (a[0] == '-')printf("-");
    	int i = 1, seed = 0, m = 0;
    	while (a[i] != 'E')
    	{
    		b[i - 1] = a[i];
    		i++;
    	}
    	int len = i - 2;
    	if (a[++i] == '+')
    		seed = 1;
    	m += a[++i] - 48;
    	while (a[++i])
    	{
    		m *= 10;
    		m += a[i] - 48;
    	}
    	i = 0;
    	while (b[i++] != '.');
    	int j = i - 1;
    	if (seed)
    	{
    		while (j < i + m - 1) {
    			b[j] = b[j + 1];
    			j++;
    		}
    		b[i + m - 1] = '.';
    		i = i + m - 1;
    		m = i;
    		for (; i >= 0; --i)
    		{
    			if (b[i] == '')b[i] = '0';
    		}
    		if (m - 1 > len)
    		{
    			b[m] = '';
    		}
    		else
    		{
    			for (j = m; j < len + 1; j++)
    			{
    				if(b[j]=='')
    					b[j] = '0';
    			}
    			b[j] = '';
    		}
    		printf("%s", b);
    	}
    	else
    	{
    		swap(b[0], b[1]);
    		if (m == 1)
    		{
    			printf("0%s", b);
    		}
    		else
    		{
    			printf("0.");
    			for (i = 1; i < m; i++)printf("0");
    			printf("%s", b+1);
    		}
    	}
    	return 0;
    }
    
  • 相关阅读:
    ZYB建围墙
    换根DP
    原码,反码,补码的计算
    字符串游戏-博弈论-trie
    【十连赛day8】神炎皇
    生成序列
    【USACO 2006 February Silver】产奶安排Stall Reservations-贪心
    tar 压缩解压命令
    java 注解
    回溯算法解决全排列问题
  • 原文地址:https://www.cnblogs.com/fsh001/p/12229529.html
Copyright © 2020-2023  润新知