PAT乙级1024 科学计数法 (20 分)

Posted 辉小歌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT乙级1024 科学计数法 (20 分)相关的知识,希望对你有一定的参考价值。

在这里插入图片描述
题目地址

#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
char flag1,flag2;
bool flag;
int step;
string temp;
string ans;
void slove()
{
	if(flag2=='-')
	{
		string ss;
		reverse(temp.begin(),temp.end());
		while(temp[0]=='0'&&temp.size()>2) ss+=temp[0],temp=temp.substr(1);
		step+=temp.size()-1; 
		
		bool index=false;
		for(int i=0;i<step||i<temp.size();i++)
		{
			if(i==step) ans='.'+ans,index=true;
			if(i<temp.size()) ans=temp[i]+ans;
			else ans='0'+ans;
		}
		
		if(!index) ans='.'+ans,ans='0'+ans;
		ans+=ss;
	}
	else
	{
		step++;
		for(int i=0;i<step||i<temp.size();i++)
		{
			if(i==step) ans+='.';
			if(i<temp.size()) ans+=temp[i];
			else ans+='0';
		}
	}
	cout<<ans<<endl;
}
int main(void)
{
	string s; cin>>s;
	if(s[0]=='-') flag1='-';
    s=s.substr(1);
	for(int i=0;s[i]!='E';i++)
	{
		if(s[i]>='0'&&s[i]<='9') temp+=s[i];
	}
	if(s.find('-')!=-1) flag2='-',s=s.substr(s.find('-')+1),step=stoi(s);
	else s=s.substr(s.find('+')+1),step=stoi(s);
	if(flag1=='-') cout<<'-';
	slove();	
}
#include<cstdio>
#include<iostream>
#include<string>
#include<algorithm> 
using namespace std;
bool flag1,flag2;//正代表正  负代表负
string s,ans; 
int step1,step2;
int sum;
void slove()
{
	if(flag2) 
	{
		if(sum>ans.size()) //过了 
		{
			cout<<ans;
			for(int i=1;i<=sum-ans.size();i++) cout<<'0'; 
		}
		else
		{
			for(int i=0;i<sum;i++) cout<<ans[i];
			if(sum!=ans.size())cout<<".";
			for(int i=sum;i<ans.size();i++) cout<<ans[i];
		}
	}
	else
	{
		reverse(ans.begin(),ans.end());
		if(sum>ans.size()) 
		{
			string temp=ans;
			for(int i=1;i<=sum-ans.size();i++) temp+='0'; 
			reverse(temp.begin(),temp.end());
			cout<<"0.";
			cout<<temp<<endl;
		}
		else
		{
			string temp;
			for(int i=0;i<sum;i++) temp+=ans[i];
			if(sum!=ans.size()) temp+=".";
			for(int i=sum;i<ans.size();i++) temp+=ans[i];
			
			reverse(temp.begin(),temp.end());
			cout<<temp<<endl;
		}
	}
}
int main(void)
{
	cin>>s; 
	
	if(s[0]=='+') flag1=true;//处理第一个正负号 
	else cout<<'-';
	s=s.substr(1);
	
	ans+=s[0]; s=s.substr(2);//处理小数点 
	for(int i=0;s[i]!='E';i++)  ans+=s[i];//将所有的数字相加 
	
	if(s.find('+')!=-1) flag2=true,step1=1,s=s.substr(s.find('+')+1),sum=stoi(s);//处理进位 
	else step2=ans.size()-1,s=s.substr(s.find('-')+1),sum=stoi(s);
	
	if(flag2) sum+=step1;
	else sum+=step2;
	
	slove();
	return 0;
} 

上面的精简写法:

#include<cstdio>
#include<iostream>
#include<string>
#include<algorithm> 
using namespace std;
bool flag1,flag2;//正代表正  负代表负
string s,ans; 
int step1,step2;
int sum;
void slove()
{
	
	if(!flag2)  reverse(ans.begin(),ans.end());
	string temp;
	if(sum>ans.size()) 
	{
		temp+=ans;
		for(int i=1;i<=sum-ans.size();i++) temp+='0'; 
		if(!flag2)
        {
        	reverse(temp.begin(),temp.end());
			cout<<"0.";
		}
		cout<<temp<<endl;
	}
	else
	{
		for(int i=0;i<sum;i++) temp+=ans[i];
		if(sum!=ans.size()) temp+=".";
		for(int i=sum;i<ans.size();i++) temp+=ans[i];
			
		if(!flag2)reverse(temp.begin(),temp.end());
		cout<<temp<<endl;
	}
}
int main(void)
{
	cin>>s; 
	
	if(s[0]=='+') flag1=true;//处理第一个正负号 
	else cout<<'-';
	s=s.substr(1);
	
	ans+=s[0]; s=s.substr(2);//处理小数点 
	for(int i=0;s[i]!='E';i++)  ans+=s[i];//将所有的数字相加 
	
	if(s.find('+')!=-1) flag2=true,step1=1,s=s.substr(s.find('+')+1),sum=stoi(s);//处理进位 
	else step2=ans.size()-1,s=s.substr(s.find('-')+1),sum=stoi(s);
	
	if(flag2) sum+=step1;
	else sum+=step2;
	
	slove();
	return 0;
} 
#include<cstdio>
#include<iostream>
#include<string>
#include<algorithm> 
using namespace std;
string s,ans;
bool flag;
int step1,step2;
int sum;
void slove()
{
	string temp;
	if(!flag) reverse(ans.begin(),ans.end());
	if(sum>=ans.size()) 
	{
		temp+=ans;
		for(int i=1;i<=sum-ans.size();i++) temp+='0';
		if(!flag) temp+=".0";
	}
	else
	{
		for(int i=0;i<sum;i++) temp+=ans[i];
		temp+='.';
		for(int i=sum;i<=ans.size();i++) temp+=ans[i];
	} 
	if(!flag) reverse(temp.begin(),temp.end());
	cout<<temp<<endl;
}
int main(void)
{
	cin>>s;  
	if(s[0]=='-') cout<<'-';
	s=s.substr(1);
	
	
	ans+=s[0];
	s=s.substr(2);
	
	for(int i=0;s[i]!='E';i++) ans+=s[i];
	
	if(s.find('-')!=-1) step2=ans.size()-1,sum=stoi(s.substr(s.find('-')+1)),sum+=step2;
	else flag=true,step1=1,sum=stoi(s.substr(s.find('+')+1)),sum+=step1;
	
	slove();
	return 0;
}

以上是关于PAT乙级1024 科学计数法 (20 分)的主要内容,如果未能解决你的问题,请参考以下文章

PAT乙级1024

PTA 乙级 1024 科学计数法 (20分)

PAT乙级 —— 1014 科学计数法 (20)

PAT 1024. 科学计数法 (20)

PAT 1024. 科学计数法 (20)

PAT 1024 科学计数法 (字符串)