注意细节+处理0
-
一个形如 a.deb的字符串
- 一定有 .和e 先要找到 .和e的位置
- 算出b,通过b可以知道.之后的位置
-
这时又要分两种情况
- 一种是.已经到数字外
- 另一种是.还在数字之内
-
处理字符前后0
把处理后的字符串存入,根据左右指针消除0
$\\$
#include<bits/stdc++.h>
using namespace std;
int n;
string s;
int l=1,r=0;
char q[10000];
int x=0;//.的位置
int ke=0;//e的位置
int main(){
cin>>s;
int len=s.length();
int b=0;
for(int i=0;i<len;++i)
if(s[i-1]=='e'){
for(int j=i;j<len;++j){
ke=i-1;
b=b*10+s[j]-'0';
}
break;
}
else if(s[i]=='.') x=i;
x+=b;
if(x<ke-1){//还在数字之内
for(int i=0;i<=x;++i){
if(s[i]=='.') continue;
q[++r]=s[i];
}
q[++r]='.';
for(int i=x+1;i<ke;++i){
q[++r]=s[i];
}
while(q[l]=='0') {//左边消0
++l;
if(q[l]=='.'){
--l;break;
}
}
while(q[r]=='0'){//右边消0
--r;
if(q[r]=='.') {
--r;break;
}
}
for(int i=l;i<=r;++i) cout<<q[i];
}
else {//变成了整数
x-=(ke-1);//0的位数
int i=0;
while(s[i]=='0' || s[i]=='.'){//处理0和.
++i;
}
for(;i<ke;++i){
if(s[i]=='.') continue;
cout<<s[i];
}
while(x>0){
cout<<"0";
--x;
}
}
return 0;
}