1024 科学计数法

1024 科学计数法 (20 分)
科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [±][1-9].[0-9]+E[±][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指数部分的正负号即使对正数也必定明确给出。

现以科学计数法的格式给出实数 A,请编写程序按普通数字表示法输出 A,并保证所有有效位都被保留。

输入格式:
每个输入包含 1 个测试用例,即一个以科学计数法表示的实数 A。该数字的存储长度不超过 9999 字节,且其指数的绝对值不超过 9999。

输出格式:
对每个测试用例,在一行中按普通数字表示法输出 A,并保证所有有效位都被保留,包括末尾的 0。

输入样例 1:
+1.23400E-03
输出样例 1:
0.00123400
输入样例 2:
-1.2E+10
输出样例 2:
-12000000000
要是自己慢慢想的话,估计做不出来,再参考别人的之后,感觉还是相对简单点,不想狼人杀那样丝毫没有头绪,这题关键还是思路,其次我觉得是函数的掌握,不会函数也行,但是会相关的函数更方便,我做了2个版本,思路都差不多,区别就在于函数。主要的函数是stoi,substr,我一开始用的是codeblocks,可能版本太低了,stoi用不了,然后我用的dev-c++,里面设置一下就可以用stoi了
stoi 里面变量是string类型,返回10进制整数,也可以添加参数,具体百度,这题只要直接转,
substr,string变量,返回string类型,比如s.substr(1,5)就是从s下标为1开始截取,之后一共5个字符,如果直接s.substr(1),就是从下标为1截取到最后,还有很多其他具体的用法,具体百度。
思路:
1.首先要把底数弄出来,再把指数弄出来,再这里就可以用函数,或者麻烦一点的方法
2.具体分析指数,大方向是±,-的情况一定会打出0.,然后就是判断底数小数点之后的位数和指数的大小,因为只有判断这个,你才能知道小数点在哪里,
3.特殊情况我没有考虑,想0.000,00340,但是这样的数结果是对的,也没有多想;
麻烦点的方法

#include 
#include 
#include 
#include 
using namespace std;
int main() {
	string s,di;
	cin>>s;
	if(s[0]=='-') cout<<'-';
	int eindex=0,zhi=0;
	while(s[eindex]!='E') eindex++;
	di=s.substr(1,eindex-1);
	int len=di.length();
	for(int i=eindex+2;i=di.length()-2){
            for(int i=0;i

函数的方法

#include 
#include 
using namespace std;
int main(){
	string s,di;
	cin>>s;
	int i=0,zhi,len;
	if(s[0]=='-') cout<<'-';
	while(s[i]!='E') i++;
	di=s.substr(1,i-1);
	zhi=stoi(s.substr(i+1));
	len=di.length();
	if(zhi<0){
		cout<<"0.";
		for(int j=0;j=len-2){
			for(int j=0;j

总结:函数在某些题目还是很方便的,

你可能感兴趣的:(pat乙级)