本题最主要在于进位,已知N >= 100,因此至少有首位为d1,二位为d2,指数c至少为N的长度-1
因为d2为对第二位数字进行四舍五入的小数部分,所以需要第三位d3判断是否进位,如果d3>=5,则d2 = d2 + 1,否则d2不变
如果d2 == 10,那么进位给d1,d2变为0,d1 = d1+1,否则d1不变
最后看d1,如果d1 == 10,那么最终的位数c = c + 1,d1变为1
最后输出d1.d2*10^c即可
#include <iostream>
using namespace std;
int main() {
string s;
cin >> s;
int d1,d2,d3;
int c = s.size() - 1;
d1 = s[0] - '0';
d2 = s[1] - '0';
d3 = s[2] - '0';
if(d3 >= 5) d2++;
if(d2 == 10){
d1++;
d2 = 0;
}
if(d1 == 10){
d1 = 1;
c++;
}
cout << d1 << '.' << d2 << '*' << 10 << '^' << c;
}
// 64 位输出请用 printf("%lld")

京公网安备 11010502036488号