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 分)的主要内容,如果未能解决你的问题,请参考以下文章