原题链接:
https://pintia.cn/problem-sets/994805342720868352/exam/problems/type/7?problemSetProblemId=994805395707510784&page=0
注意点:
- 字符串的处理。针对不同情况的不同处理。
代码:
#include <iostream>
#include <string>
using namespace std;
#define endl '\n'
string str;
char flagNum, flagExp;//表示数字正负,指数正负
string intPor, fracPor, expPor;
int digitsFrac;//记录小数部分的位数
signed main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
getline(cin, str);
flagNum = str[0];
intPor = str[1];
int ePos = str.find('E');
fracPor = str.substr(3, ePos - 3);
flagExp = str[ePos + 1];
expPor = str.substr(ePos + 2, str.size()-ePos-2);
digitsFrac = ePos - 3;
int exp = stoi(expPor);
if (flagNum == '-') {
cout << flagNum;
}
if (flagExp == '+') {
if (exp < digitsFrac) {//不需要添0,需要添小数点
cout << intPor;
for (int i = 0; i < fracPor.size(); i++) {
if (i == exp) {
cout << '.';
}
cout << fracPor[i];
}
}
else if (exp == digitsFrac) {//不需要添0,不需要添小数点
cout << intPor;
for (int i = 0; i < fracPor.size(); i++) {
cout << fracPor[i];
}
}
else{
cout << intPor;
for (int i = 0; i < fracPor.size(); i++) {
cout << fracPor[i];
}
for (int i = 0; i < exp - digitsFrac; i++) {
cout << '0';
}
}
}
else {
if (exp == 0) {
cout << intPor;
cout << ".";
for (int i = 0; i < fracPor.size(); i++) {
cout << fracPor[i];
}
}
else if (exp == 1) {
cout << "0.";
cout << intPor;
for (int i = 0; i < fracPor.size(); i++) {
cout << fracPor[i];
}
}
else {
cout << "0.";
for (int i = 0; i < exp - 1; i++) {
cout << '0';
}
cout << intPor;
for (int i = 0; i < fracPor.size(); i++) {
cout << fracPor[i];
}
}
}
return 0;
}