题目地址
上面的精简写法:
#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;
}
#include<bits/stdc++.h>
using namespace std;
int main(void)
{
string s,a; cin>>s;
if(s[0]=='-') cout<<"-";
s=s.substr(1);
int n;//需要移动的位数。
for(int i=0;i<s.size();i++)
{
if(s[i]>='0'&&s[i]<='9') a+=s[i];
if(s[i]=='E') break;
}
n=stoi(s.substr(s.find('E')+1));
if(n<0)
{
cout<<"0.";
for(int i=0;i<abs(n)-1;i++) cout<<0;
for(int i=0;i<a.size();i++) cout<<a[i];
}
else
{
n++;
if(n<a.size())
{
for(int i=0;i<n;i++) cout<<a[i];
cout<<".";
for(int i=n;i<a.size();i++) cout<<a[i];
}
else
{
cout<<a;
for(int i=0;i<n-a.size();i++) cout<<0;
}
}
}