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

科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][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开发者节福利”淘系妹子内部Java技术面分享


下一篇:【1024】图说Oracle基础知识