测试点2,3,4卡的是E后面是+的情况
主要卡的是+的情况,题目不难,用substr截取出E前后的东西,然后根据情况输出即可,具体代码里有解释
#include<iostream>
#include<string>
#include<algorithm>
#include<sstream>
using namespace std;
void change(string k,int &result)//这里计算E后面的数有是多少
{
stringstream t;
t<<k;
t>>result;
}
int main()
{
string num,headnum,lastnum;
int last;
int lastflage=0;
getline(cin,num);
int index=num.find('E');
if(num[0]!='+'){
cout<<"-";
}//判断是不是-是-的先输出出来
if(num[index+1]=='+'){
lastflage=1;
}//标记一下E后面是正是负
headnum=num.substr(1,index-1);//截取E前面的
lastnum=num.substr(index+2,num.size()-1);//截取E后面的
change(lastnum,last);//计算E后面的有多少
if(lastflage==0){
if(last>0){
cout<<"0.";
}//如果是-的,且E后面的数大于0,肯定是0.xxx所以先输出0.
for(int i=1;i<last;i++){
cout<<0;
}//然后输出移动的N个0
for(int i=0;i<headnum.size();i++){
if(headnum[i]!='.'){
cout<<headnum[i];
}
}//然后输出剩下的数
}else{
cout<<headnum[0];//因为这样一定是正的先输出第一位
int i,j;s//分别统计用掉了last几个,输出了几个字符
for(j=2,i=0;j<headnum.size()&&i<last;j++,i++){
cout<<headnum[j];
}//输出小于last的last个字符
if(j==headnum.size()){
for(j=0;j<last-i;j++){
cout<<"0";
}//如果j刚好把这个数输完了,然后看last剩下的还有没有如果有输出0
}else{
cout<<".";//如果没有输出完,说明剩下的肯定是小数点后面的了,就输出一个.
for(;j<headnum.size();j++){
cout<<headnum[j];
}//继续吧后面的字符输出出来
}
}
return 0;
}