空了很久这个题,之前觉得很难,后来想了一下,捋清思路之后准备做一下,用了不是很简单的方法,但是容易懂。
直接计算小数点左右的位数,直接输出字符串从“.”到“E”之间的字符。
#include <iostream>
using namespace std;
int main() {
string s;
cin >> s;
int e;
for(int i = 0; i < s.length(); i++) {
if(s[i] == 'E') {
e = i;
break;
}
}
int ex = 0;
int exf = 0;
for(int i = e + 1; i < s.length(); i++) {
if(s[i] >= '0' && s[i] <= '9') {
ex = ex * 10 + (s[i] - '0');
} else if(s[i] == '+') {
exf = 1;
} else if(s[i] == '-') {
exf = 0;
}
}
int numf = 0;
if(s[0] == '+') {
numf = 1;
}
if(!numf) {
cout << "-";
}
if(!exf) {
ex = ex - 1;
if(ex >= 1) {
cout << "0.";
for(int i = 0; i < ex; i++) {
cout << "0";
}
cout << s[1];
} else {
cout << s[1] << ".";
}
for(int i = 3; i < e; i++) {
cout << s[i];
}
} else {
cout << s[1];
if(ex < e - 3) {
for(int i = 3; i < 3 + ex; i++) {
cout << s[i];
}
cout << ".";
for(int i = ex + 3; i < e; i++) {
cout << s[i];
}
} else {
for(int i = 3; i < e; i++) {
cout << s[i];
}
ex = ex - (e - 3);
for(int i = 0; i < ex; i++) {
cout << "0";
}
}
}
return 0;
}