pta乙级1024科学计数法(检测点5段错误,有没有大佬帮帮忙)

思路:

1.先看最前面的正负号。

2.找到E。

3.根据E后面跟着的符号进行分类,主要判断小数点往哪移动,或者是否需要补小数点。

4.如果是负号,则必然要补0和小数点;

  反之,如果是正号,则要判断需要移动的小数点位数是否大于后面的长度(用来判断是否需要小数点)移动的时候利用数组逐项移动,若要去除最后一个多余的,未被覆盖的数,用pop.back()即可。

#include<bits/stdc++.h>
using namespace std;
int main()
{
	string science,num;
	cin>>science;
	if(science[0]=='-') cout<<'-';
	int bit=0,i=0,w=0;
	while(science[++i]!='E')
	{
		num+=science[i];
		bit++;
	}
	int temp=i;
	while(science[temp+2]!='\0')
	{
		w=w*10+(science[temp+2]-'0');
		temp++;
	}
	if(science[++i]=='-')
	{
		for(int j=0;j<w;j++)
		{
			num='0'+num;
		}
		for(int j=w;j>=1;j--) num[j+1]=num[j];
		num[1]='.';
	}
	else if(science[i]=='+')
	{
		if(w>=bit-2)
		{
			for(int j=2;j<2+w;j++) num[j-1]=num[j];
			num.pop_back();
			for(int k=1;k<=w-bit+2;k++)
			num+='0';
	    }
		else if(w<bit-2)
		{
			for(int j=2;j<2+w;j++) num[j-1]=num[j];
			num[1+w]='.';
		}
	}
	cout<<num;
	return 0;
}

第一个错误(检测点2,6答案错误):后面的指数不一定只有两位,也可能为更大的数字。


第二个错误(检测点5段错误):这玩意为啥是段错误。


似乎知道为啥了,我输入+9.34E+971时pta测试台显示堆栈溢出了,查一查为什么。


测试出来指数极限似乎是55。超出55就会溢出。


不行,还是整不明白。麻了。

  • 11
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值