欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

A1073:Scientific Notation(20')

程序员文章站 2022-07-15 10:29:47
...

A1073:Scientific Notation(20')

思路:同乙级1024。先找到 E 的位置,用 flag_E 标记一下。然后计算 flag_E+2 位置一直到末尾的数,计算指数大小 exp。然后根据 E 后面的 “+-” 号分类讨论。

“-”:先判断字符串第一项是否为 “-”,“-” 输出,“+” 不输出。然后先输出 “0.”。再输出格式为 0.000XXX。小数点后连续 0 的个数为 exp-1,然后 XXX 就是原字符串 str[3] 一直到 str[flag_E-1] 的数字。

“+”:分三种情况讨论:

1.exp 小于小数点后的数字个数。照样先判断是否输出 “-”,然后从 str[3] 一直输出到 str[exp+2],再输出一个 “.”,最后输出剩余数字。

2.exp 正好等于小数点后数字个数。那么就不用输出 “.”。

3.exp 大于小数点后的数字个数。照样先判断是否输出 “-”,然后从 str[3] 一直输出到 str[flag_E-1],这里 exp 要递减。最后,输出 exp 更新后的个数的 “0”。

代码:

#include<cstdio>
#include<cstring>
int main(){
	char str[10010];
	scanf("%s",str);
	int n = strlen(str);
	int flag_E = -1;
	for(int i = 0;i < n; i ++){
		if(str[i] == 'E'){
			flag_E = i;
			break;
		}
	}
	int exp = 0;
	//计算指数
	for(int i = flag_E + 2;i < n;i ++){
		exp = exp*10 + (str[i] - '0');
	}
	//特判
	if(exp == 0){
		for(int i = 0;i < n;i ++){
			printf("%c",str[i]);
		}
	}
	//负号
	if(str[flag_E + 1] == '-'){
		if(str[0] == '-'){  //判断首位是否为'-','-'要输出
			printf("%c",str[0]);
		}
		printf("0.");
		for(int i = 0;i < exp-1;i ++){  //小数点后连续0的个数
			printf("0");
		}
		printf("%c",str[1]);
		for(int i = 3;i < flag_E;i ++){
			printf("%c",str[i]);
		}
	}
	//正号
	else{
		if(exp < flag_E-3){
			if(str[0] == '-'){
				printf("-");
				printf("%c",str[1]);
			}
			else{
				printf("%c",str[1]);
			}
			for(int i = 3;i <= exp+2;i ++){
				printf("%c",str[i]);
			}
			printf(".");  //输出小数点
			for(int i = exp+3;i < flag_E;i ++){
				printf("%c",str[i]);
			}
		}
		else if(exp == flag_E-3){  //不用输出小数点
			if(str[0] == '-'){
				printf("-");
				printf("%c",str[1]);
			}
			else{
				printf("%c",str[1]);
			}
			for(int i = 3;i <= exp+2;i ++){
				printf("%c",str[i]);
			}
		}
		else{
			if(str[0] == '-'){
				printf("%c%c",str[0],str[1]);
			}
			else{
				printf("%c",str[1]);
			}
			for(int i = 3;i < flag_E;i ++){
			    printf("%c",str[i]);
			    exp --;  //exp要递减,进行更新
		    }
		    for(int i = 0;i < exp;i ++){  //输出0
			    printf("0");
		    }
		}
	}
	return 0;
}

版权声明:本文为博主原创文章,如有错误,恳请大家在评论区指出,在下不胜感激~如要转载注明出处即可~