PAT B1024 科学计数法 (20分)

南笙酒味 提交于 2020-01-16 23:53:21

题意:首先浮点数部分必有1位小数,指数部分必为整数。其次要求保留所有有效位。

我将其拆分为2个字符串保存,左边的浮点数部分(去掉小数点)num,右边的指数部分exp。均包含符号。首先输出最前面的符号,为正不处理。n为exp的绝对值。然后根据指数的正负:若为负数,共计输出n个0。若为正数,区分为n>=valid_digit和n<valid_digit。前者无小数点,后者需要在适当的位置输出小数点。若为0,当然经过测试,测试数据中不含0指数,严谨起见还是加上,则原样输出。

//1024 科学计数法 (20分)
#include <cstdio>
char num[10000] = { 0 };
char exp[10000] = { 0 };
int main()
{
	int i, j;
	i = j = 0;
	char ch;
	while ((ch = getchar()) != 'E')
	{
		if (ch == '.') {
			continue;
		}
		num[i++] = ch;
	}
	while ((ch = getchar()) != '\n')
	{
		exp[j++] = ch;
	}
	if (num[0] == '-')//最前面的符号部分
		putchar('-');
	int valid_digit = i - 2;//小数部分的有效位数是i-2
	int n = 0;
	sscanf(exp+1, "%d", &n);//将exp字符串转化为正整数
	if (n) {
		if (exp[0] == '+') {
			if (n >= valid_digit) {//无小数点
				printf("%s", num + 1);
				int k = n - valid_digit;
				while (k--)
				{
					putchar('0');
				}
			}
			else//有小数点
			{
				i = 1;
				while (num[i])
				{
					putchar(num[i]);
					if (i == n + 1)//在该位置输出小数点
						putchar('.');
					i++;
				}
			}
		}
		else if (exp[0] == '-') {
			printf("0.");
			n--;//输出n-1个0
			while (n--)
			{
				putchar('0');
			}
			printf("%s", num + 1);
		}
	}
	else
	{
		printf("%c.%s", num[1], num + 2);
	}
	return 0;
}

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!