PAT乙级1024

题目链接

思路

找到E和"."的位置 
确定小数点是右移还是左移
根据移动的位数与小数点后数字的位数的不同情况分别处理

实现的比较繁琐。。。。以后再想简单的方法吧

实现

#include <iostream>
#include <string>
#include <cstring>
using namespace std;


int main(int argc, char** argv) {
	string input,output="";
	char direct;
	string move="";
	int movestep=0;
	cin>>input;
	int len=strlen(input.c_str());
	string head="";
	if(input[0]=='-')
		head.append("-");
	int i,dot,Epos;
	for(i=1;input[i]!='-'&&input[i]!='+';i++)
	{
		if(input[i]=='.'||input[i]=='E')
		{
			if(input[i]=='.')
				dot=i;
			if(input[i]=='E')
				Epos=i;
			continue;
		}
		output.append(to_string(input[i]-'0'));
	}
	direct=input[i];
	for(i+=1;i<len;i++)
	{
		move.append(to_string(input[i]-'0'));
	}
	sscanf(move.c_str(),"%d",&movestep);
	if(direct=='+')
	{
		int j=0;
		if(movestep>(Epos-dot-1))
		{
			int m=movestep-(Epos-dot-1);
			while(m--)
				output.append("0");
			head.append(output);
		}
		else
		{
			string out="";
			int m;
			for(m=0;m<=movestep;m++)
			{
				out.append(to_string(output[m]-'0'));
			}
			if(movestep!=(Epos-dot-1))
				out.append(".");
			for(m;m<strlen(output.c_str());m++)
				out.append(to_string(output[m]-'0'));
			head.append(out);
		}
	}
	else
	{
		head.append("0.");
		movestep-=1;
		while(movestep--)
			head.append("0");
		head.append(output);
	}
	cout<<head;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值