1073. Scientific Notation

#include <cstdio>
#include <string>
#include <iostream>
#include <sstream>

using namespace std ;

int main(void)
{
	string  data ;
	string  di , exp ;
	string ans = "" ;
	char sysDi , sysE ;
	int nExp ;
	int eIndex ; 

	//freopen("input.txt" ,  "r" , stdin);
	getline( cin , data ) ;
	
	eIndex = data.find( 'E' ) ;

	sysDi = data.at(0) ;
	sysE  = data.at( eIndex + 1 ) ;

	di = data.substr(1 , eIndex - 1 ) ;
	exp = data.substr( eIndex + 2 , data.length() -1 ) ;
	
	stringstream ss ;
	ss <<exp ;
	ss >>nExp ;
	
	if( nExp == 0 )
	{
		if( sysDi == '-' )
		{
			cout << '-'  ;
		}
	
			cout << di << endl ;
	}
	
	//是放大的
	if( sysE == '+' )
	{
		//说明放大之后还是小数
		if( di.length() - 2 > nExp )
		{
			ans = di.at(0) + di.substr( 2  ,  nExp ) + "." + di.substr( 2 + nExp , di.length() - 2 - nExp) ; 
		}

		//放大之后超出了原来的数
		else
		{
			int i  = nExp - di.length() +  2 ; 
			ans = di.at(0) + di.substr( 2 ,  di.length() - 2 ) ;
			
			while( i -- )
			{
				ans = ans + "0" ;
			}
		}
	}
	//是缩小的
	else if( sysE == '-' )
	{
		int i = nExp - 1 ;
		ans = "0." ;

		while( i -- )
		{
			ans = ans + "0" ;
		}

			ans = ans + di.at(0) + di.substr( 2 , di.length() - 2 ) ;
	}
	
	//是否为负数,整数不需要加符号
	if( sysDi == '-')
	{
		cout << '-' ;
	}

		cout << ans <<endl ;

	return 0 ;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值