科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][1-9].
[0-9]+E[+-][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指数部分的正负号即使对正数也必定明确给出。
现以科学计数法的格式给出实数 A,请编写程序按普通数字表示法输出 A,并保证所有有效位都被保留。
每个输入包含 1 个测试用例,即一个以科学计数法表示的实数 A。该数字的存储长度不超过 9999 字节,且其指数的绝对值不超过 9999。
对每个测试用例,在一行中按普通数字表示法输出 A,并保证所有有效位都被保留,包括末尾的 0。
+1.23400E-03
结尾无空行
0.00123400
结尾无空行
-1.2E+10
结尾无空行
-12000000000
结尾无空行
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)