PATB1024.科学计数法(20)

本文介绍了一种算法,用于将浮点数从科学计数法转换为标准十进制表示,并处理了指数为正和为负时的不同情况。通过C语言实现,详细解释了如何根据指数调整小数点的位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接:点击打开链接

        

知识点笔记:

1.对于位置pos(E的位置)和指数exp, 注意当指数为正时,若pos-3=exp,则是一个整数,不需要小数点,pos-3>3时,有小数部分,当pos-3<exp时,要在最后补exp-(pos-3)个0

AC代码:

#include <cstdio>
#include <cstring>

int main() {
	char str[10010];
	gets(str);
	int len=strlen(str);
	if(str[0]=='-') printf("-");

	int pos = 0; //pos存放字符串中E的位置
	while(str[pos]!='E'){
		pos++;
	}

	int exp=0; //exp存放指数(先不考虑正负)

	for(int i=pos+2;i<len;i++){
		exp=exp*10+(str[i]-'0');
	}

	if(exp==0){ //特判,指数为0
		for(int i=1;i<pos;i++){
			printf("%c",str[i]);
		}
	}

	if(str[pos+1]=='-'){ //如果指数为负
		printf("0.");
		for(int i=0;i<exp-1;i++){
			printf("0");
		}
			printf("%c",str[1]);
			for(int i=3;i<pos;i++){
				printf("%c",str[i]);
			}
	}else{

		//如果指数为正
		for(int i=1;i<pos;i++){
			//输出小数点移动之后的数
			if(str[i]=='.') continue; //略过原来的小数点
			printf("%c",str[i]); //输出当前数位
			if(i == exp+2 && pos-3 != exp){
				//小数点加在位置(exp+2)上
				//原小数点和E之间的数字个数(pos-3)不能等于小数点右移位数exp
				printf(".");
			}
		}
		//如果指数exp较大,输出多余的0
		for(int i=0;i<exp-(pos-3);i++){
			printf("0");
		}

	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猪突猛进!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值