这类题目几乎不需要数据结构,算法基础,主要通过简单的逻辑流程和判断实现。
题目描述如下:
题目大意:
就是将十进制的科学计数法的数字转换成十进制普通计数法。
这个题目涉及到了大量的字符串的常用操作方法,如字符串的求字串,字符串的部分移除,字符串的插入;还有将整数字符串转变为整数:atoi(str.c_str())
大致思路如下:
首先使用一个字符串接收输入,接着进行字符串的处理,首先找到‘E’所在的位置,E后面的位置即为幂的符号,将符号后面的字符串取出来,转化成整数n,如果幂的符号为正,则在E之前插入n-1个0,并且将小数点去掉;如果幂的符号为负,则在第一个符号位后面插入n个0,并且去掉原来的小数点后,在第一个位置或者第二个位置从新插入小数点(取决于第一个符号位)。
提交结果如下:
提交的代码如下:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str;
cin >> str;
int imp = str.find('E');
int mi = atoi(str.substr(imp + 1).c_str()); //得到幂的数值
str.erase(str.begin() + imp, str.end());
if (mi > 0)
{
if (str.size() - str.find('.') - 1 <= mi)
{
int n = mi - (str.size() - str.find('.') - 1);
for (int i = 0; i < n; i++)
{
string temp = "0";
str.insert(str.end(), temp.begin(), temp.end());
}
str.erase(str.begin() + str.find('.'));
}
else
{
string temp = ".";
int a = str.find(".");
str.erase(str.begin() + a);
str.insert(str.begin() + a + mi, temp.begin(), temp.end());
}
}
if (mi < 0)
{
mi = -mi;
str.erase(str.begin() + 2);
for (int i = 0; i < mi; i++)
{
string temp = "0";
str.insert(str.begin() + 1, temp.begin(), temp.end());
}
string temp = ".";
str.insert(str.begin() + 2, temp.begin(), temp.end());
}
if (str[0] == '+')
str.erase(str.begin());
cout << str << endl;
}
提交代码后,排名上升到26874