1073. Scientific Notation (20)

本文介绍了一道关于科学记数法转换的编程题解,使用C++实现,通过字符处理将输入的科学记数法转换为指定格式的输出。文章详细解释了解题思路并附上了已通过评测的源代码。

1. 原题: https://www.patest.cn/contests/pat-a-practise/1073

2. 思路:

题意: 科学记数法的转换。
思路:
字符处理题。可以用string, 我用的char字符串。
然后分情况讨论就好了。
注意,“+”不输出。
已AC

3. 源码(已AC):

#include<iostream>
#include<vector>
using namespace std;
const int Max = 10010;//最大字符数目

int main(void)
{
	//freopen("in.txt", "r", stdin);
	char s[Max];
	cin.getline(s, Max);//读入一行字符串
	char sign = s[0];//±号标志
	vector<char> re;//存储结果,不包含小数点

	int i;
	for (i = 1; s[i] != 'E'; i++)
	{
		if (s[i] == '.')
			continue;
		re.push_back(s[i]);
	}
	int e_num;//指数
	i++;//自增后的位置就是指数的起点
	sscanf(s + i, "%d", &e_num);//字符串转换数字

	if (sign == '-')
		cout << sign;
	if (e_num < 0)//小数情况
	{
		for (int i = 0; i < -e_num; i++)
		{
			if (i == 0)
				cout << "0.";
			else
				cout << 0;
		}
		for (int i = 0; i < re.size(); i++)
			cout << re[i];
	}
	else
	{
		if (e_num < (re.size() - 1))//表示有小数点
		{
			for (int i = 0; i < re.size(); i++)
			{
				if (i == e_num)//小数点位置
					cout << re[i] << '.';
				else
					cout << re[i];
			}
		}
		else//无小数点,要补0
		{
			for (int i = 0; i < re.size(); i++)
				cout << re[i];

			int cnt = e_num - re.size() + 1;
			while (cnt > 0)
			{
				cout << 0;
				cnt--;
			}
		}
	}
	cout << endl;
	
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值