PAT乙级(Basic)题库---1024

题目

1024-科学计数法

解题思路

首先找到字符E所处的位置,从而确定指数的值。若指数为非零负值,则小数点左移,由于科学计数法的整数只有一位,因此输出必然为0.X…X,小数点后0的个数为指数值绝对值减1。若指数为其他值,考虑小数点右移后是否显示的,即指数值与原数小数点后长度的比较,若指数值小,则小数点右移指数值后显示,指数值大最后补相应差值个数的0输出。

代码

#include<iostream>
#include<sstream>
#include<algorithm>
#include<string>
#include<stack>
#include<iomanip>
#include<cmath>
#include<string.h>
using namespace std;
int main()
{
	string a;
	while(cin>>a){	
		//判断正负,负号输出,正号不输出	
		if(a[0]=='-'){
			cout<<"-";
		}
		
		//找到字符‘E’的位置并获得指数的绝对值大小 
		int pos=a.find('E');
		int e=0;
		for(int i=pos+2;i<a.length();i++){
			e=e*10+(a[i]-'0');
		}
		
		//指数符号为负且不为零的情况 
		if(a[pos+1]=='-'&&e>0){
			cout<<"0.";
			for(int i=1;i<e;i++){
				cout<<"0";
			}
			cout<<a[1];
			for(int i=3;i<pos;i++){
				cout<<a[i];
			}
		}
		
		else{
			cout<<a[1];
			int len=pos-3;
			
			//小数点右移后不显示的情况 
			if(len<=e){
				for(int i=3;i<pos;i++){
					cout<<a[i];
				}
				for(int i=0;i<e-len;i++){
					cout<<"0";
				}
			}
			
			//小数点右移后仍显示的情况 
			else{
				for(int i=3;i<e+3;i++){
					cout<<a[i];
				}
				cout<<".";
				for(int i=e+3;i<pos;i++){
					cout<<a[i];
				}
			}
		}
		
		cout<<"\n";
		
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值