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