题目描述
样例
blablabla
算法1
(暴力模拟)
如果 num 是0.0,则输出0
如果 d = 0
则num = num,
如果 d >= 小数位置
则 num 去掉小数点,补相应的数量的0
如果 d <小数位置
则 num进行循环交换.和.的下一个的数
去头部的0和尾部的0
C++ 代码
#include<bits/stdc++.h>
using namespace std;
string s, num, M;
int d;
int get_id(char ch){
for(int i = 0; i < s.size(); i++){
if(s[i] == ch) return i;
}
}
void check(){
if(num == "0.0") {
num = "0";
return ;
}
M = num.substr(get_id('.')+1, num.size() - get_id('.'));
if(d == 0){
int m = stoi(M);
if(m == 0){
num.erase(get_id('.'), num.size() - get_id('.'));
}
return ;
}
// cout << M << endl;
// cout << M.size() << endl;
if(d >= M.size()){
int t = get_id('.');
int cnt = d - (num.size() - t - 1);
num.erase(t, 1);
// cout << M.size() << endl;
// cout << cnt << endl;
for(int i = 1; i <= cnt; i++) num += '0';
}
if(d < M.size()){
for(int i = get_id('.'); i < get_id('.')+d; i++){
swap(num[i], num[i+1]);
}
}
while(num[0] == '0'){
num.erase(0,1);
}
}
int main(){
cin >> s;
num = s.substr(0, get_id('e'));
// cout << num << endl;
string D = s.substr(get_id('e')+1, s.size() - get_id('e'));
// cout << D << endl;
d = stoi(D);
// cout << d << endl;
check();
cout << num << endl;
return 0;
}