ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

1024 科学计数法 (20 分)python3实现(附详细步骤解读)

2021-10-25 09:03:13  阅读:250  来源: 互联网

标签:1024 存储 20 exponent int float 计数法 print 小数


科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][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

结尾无空行

python代码如下:

c,inx=input().split("E")#c=+1.23400存储科学计数法的数,inx=-03存储指数

out="" if c[0]=="+" else "-"#存储数的正负
#out=-用来保存最后的结果

a,b=c[1:].split(".")#a和b分别存储数的整数和小数部分
#a=1,b=23400

num=a+b#num=123400将整数部分和小数部分拼接到一起
d=int(inx[1:])#d=3存储指数的大小

q=len(b)#q=5存储小数部分的长度

if d==0:#指数为零时,直接输出E之前的数c[1:]
    out+=c[1:]
elif inx[0]=="+":#指数为正
    w=d-q#w=幂指数大小-小数长度
    if w<0:#小数长度更长,说明有效位够小数点移动
        out+=num[:d+1]+"."+num[(d+1):]
    else:#幂指数更打,说明有效位不够小数点移动,需要填零
        out+=num+"0"*w
else:#指数为负,向前移动小数点
    out+="0."+"0"*(d-1)+num
    
print(out)

自己未通过的代码如下:(输出没有问题,但是有几个测试点没有通过)

a=input()
#a= +1.23400E-03

b=''#存储最终结果

if a[0] == '-':
    b += '-'
    a = a.lstrip("-")
    '''
    strip() 删除字符串首尾指定字符
    不指定则默认删除字符中首尾的\t,\n,\r,空格等字符
    lstrip() 删除字符串首部字符
    rstrip() 删除字符串尾部字符
    '''
elif a[0] == "+":
    a = a.lstrip("+")
# print(a)#1.23400E-03

c,exponent=a[:].split("E")
# print(c)#c 存储a的数字部分
# print(exponent)#存储a的指数部分

d=exponent[0]#存储10的指数正负
exponent=exponent[1::]
# print(exponent)
if d=="+":
    b+=str(float(c)*10** int(exponent))
elif d=="-":
    b+=str(float(c) * 0.1 ** int(exponent))
# print(float(b))

count=''#计算小数的位数
p,q=c[:].split(".")
# print(q)
for i in range(len(q)):
    if q[i]=='0':
        count+=q[i]#目前的小数位数
# print(count)

#判断转换后的数是否有小数位
if exponent=="0":#如果指数为零,直接输出字符串c
    print("%s"%c)
else:
    if float(b) - int(float(b)) == 0.0:  # 没有小数位,直接输出int类型的值
        print(int(float(b)))
    elif float(b)-int(float(b))!=0.0:#有小数位,需要计算小数的位数
        if len(q.rstrip('0')) > int(exponent):
            # 如果不算零的有效位数()够小数点移动用,不用添加零
            print(("%f" % float(b)).strip("0"))
        else:# 如果有效位数不够小数点移动用,添加零
            print("%f"%float(b)+count)

标签:1024,存储,20,exponent,int,float,计数法,print,小数
来源: https://blog.csdn.net/weixin_45942949/article/details/120931018

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有