#include<iostream>#include<string>#include<vector> #include<stack>#include<map>#include<algorithm>usingnamespacestd;
intmain(){
string s;
string base;
int count;//记录有效数据的个数cin >> s;
int i;
for (i = 0; i < s.size(); i++) {
if (s[i] == 'E')
break;
}
base = s.substr(0, i);
intexp = stoi(s.substr(i + 1));
if (exp >= 0) { //需要右移的情况if (exp > base.size() - 3)
{
base.insert(base.end(), exp - base.size() + 3, '0');
base.erase(2, 1);
}
else {
for (int i = 0; i < exp; i++) {
swap(base[2 + i], base[3 + i]);
}
}
}
else { //需要左移的情况exp *= -1;
for (int i = 0; i < exp; i++) {
base.insert(base.begin() + 1, '0');
}
base.insert(base.begin() + 2, '.');
base.erase(exp + 3, 1);
}
if (base[0] == '+')
base.erase(0, 1);
if (base[base.size() - 1] == '.')//第一次问题就出这了,如果右移后的小数点正好在最后一位,就需要把它删掉
base.erase(base.size() - 1);
cout << base << endl;
return0;
}
复制代码
python3代码
defmain():
base,exp = input().split('E')
exp = int(exp)
base = base.replace('+','')
#小数点左移的情况if(exp < 0):
flag = '-'if(base[0] == '-') else''
base = base.replace('-','')
base = base.replace('.', '')
base = list(base)
for i in range(abs(exp)):
base.insert(0,'0')
base.insert(1,'.')
base = flag + ''.join(base)
else: #小数点右移的情况
temp = base.split('.')
base = list(temp[1])
if(exp >= len(base)):
for i in range(exp - len(base)):
base.append('0')
else:
base.insert(exp,'.')
base = ''.join(base)
base = temp[0] + base
print(base)
main()
复制代码