PAT乙级考试-1024 科学计数法

题目
在这里插入图片描述
在这里插入图片描述
思路

  1. 拆分数据
    首先使用sor[]数组将整个字符串录入,然后有
    (1)使用tag1表示最前面的正负号,tag2表示指数的正负号;
    (2)使用major数组录入第一个符号之后,‘E’之前的主体部分,并且顺带求出主体部分的小数位数n1;
    (3)使用index算出指数的大小
  2. 打印数据
    (1)tag1==‘-’时打印
    (2)index为0时单独处理,直接把major数组整个打出即可;
    (3)tag2==‘-’时,先打印一个“0.”,再打印index-1个0,再打印major数组中不为‘.’的部分
    (4)tag2==‘+’时,再判断index和n1的关系
    (5)若index>=n1,先打印major数组中不为’.‘的部分,再打印index-n1个0;
    (6)若index<n1,先打印major数组中index+1位数字(‘.’跳过),再打印一个小数点’.’,再打印major数组中剩余部分即可

该题有更简单的打印方法,打总体思路无疑都是切割得到各种数据后再各种情况下打印即可

#include<stdio.h>
#include<stdlib.h>

int main(void)
{
	int i, n1, count, index = 0;
	
	char sor[10000];
	scanf("%s", sor);
	char tag1 = sor[0];
	
	char major[10000];
	for (i = 1; sor[i] != 'E'; i++)
		major[i] = sor[i];
	major[i] = '\0';
	n1 = i - 3;

	char tag2 = sor[i + 1];
	for (i = i + 2; sor[i] != '\0'; i++)
		index = 10 * index + (sor[i] - '0');

	if (tag1 == '-')
		printf("%c", tag1);
	if (index != 0)
	{
		if (tag2 == '+')
		{
			if (index >= n1)
			{
				for (i = 1; major[i] != '\0'; i++)
					if (major[i] != '.')
						printf("%c", major[i]);
				for (i = 0; i < index - n1 ; i++)
					printf("0");
			}
			else
			{
				for (i = 1, count = 0; count < index + 1; i++)
					if (major[i] != '.')
					{
						printf("%c", major[i]);
						count++;
					}
				printf(".");
				for (; major[i] != '\0'; i++)
					printf("%c", major[i]);
			}
		}
		else
		{
			printf("0.");
			for (i = 0; i < index - 1; i++)
				printf("0");
			for (i = 1; major[i] != '\0'; i++)
				if (major[i] != '.')
					printf("%c", major[i]);
		}
	}
	else
		for (i = 1; major[i] != '\0'; i++)
			printf("%c", major[i]);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值