天天看点

PAT A1073 Scientific Notation (20分)科学计数法转成普通数字(恶心)

#include <iostream>
#include <string>
using namespace std;

int main(){
	string str;
	cin >> str;


	if(str[0] == '-')	cout << '-';	//该数字为负数,先输出负号

	int pos = 0;	//记录'E'的下标
	while(str[pos] != 'E')		pos++;
	
	int exp = 0;	//exp记录指数的绝对值
	for(int i = pos + 2; i < str.length(); i++){
		exp = exp * 10 + str[i] - '0';
	}

	if(str[pos + 1] == '-'){	//指数为负
		printf("0.");	//先输出"0."
		for(int i = 0; i < exp - 1; i++){	//再输出exp-1个0
			printf("0");
		}
		for(int i = 1; i < pos; i++){		//再输出底数中所有的有效数字
			if(str[i] != '.'){
				printf("%c", str[i]);
			}
		}
	}
	else{						//指数为正
		for(int i = 1; i < pos; i++){
			if(str[i] == '.')	continue;
			printf("%c", str[i]);
			if(i - 2 == exp && pos - 3 > exp){	//i-2是底数中小数点后已输出的数字个数,pos-3是底数中小数点后所有的数字个数
				printf(".");					//只有当底数中小数点后已输出的数字个数等于指数,并且后面还有未输出的数字时才输出小数点
			}
		}
		for(int i = pos - 3; i < exp; i++){		//上面的循环结束代表底数部分已全部输出完毕,如果底数中小数点后数字个数比指数小,那么还要补0
			printf("0");
		}
	}
	return 0;
}

           

个人感觉:

像是玩文字游戏,玩的是字符而已

感觉这种题目只是为了让你处理字符串而出题,就是想让你恶心,一点实际意义都没有。

这样转换出来的东西只是看着像个数字,其实不是数字,也不能继续使用它来进行后续计算。

令人恶心。