首页 > 试题广场 >

科学计数法 (20)

[编程题]科学计数法 (20)
  • 热度指数:19702 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][1-9]"."[0-9]+E[+-][0-9]+,即数字的整数部分
只有1位,小数部分至少有1位,该数字及其指数部分的正负号即使对正数也必定明确给出。

现以科学计数法的格式给出实数A,请编写程序按普通数字表示法输出A,并保证所有有效位都被保留。

输入描述:
每个输入包含1个测试用例,即一个以科学计数法表示的实数A。该数字的存储长度不超过9999字节,且其指数的绝对值不超过9999。


输出描述:
对每个测试用例,在一行中按普通数字表示法输出A,并保证所有有效位都被保留,包括末尾的0。
示例1

输入

+1.23400E-03

输出

0.00123400
a=input()
flag=a[0]
interger=a[1]
decimal=""
j=3
for i in a[3:]:
    if i=="E":
        j+=1
        break
    else:
        decimal+=i
        j+=1
flag2=a[j]
index=int(a[j+1:])
# print(flag,interger,decimal,flag2,index)
flag="" if flag=="+" else "-"
if flag2=="+":
    if index>len(decimal):
        print(flag+interger+decimal.ljust(index,"0"))
    else:
        print(flag+interger+decimal[:index]+"."+decimal[index:])
if flag2=="-":
    print(flag+"0."+interger.rjust(index,"0")+decimal)

发表于 2019-09-01 10:19:13 回复(0)
num  = input().split('E')
num_1 = list(num[0]) num_1.remove('.')#将小数点移除,方便处理,+1.234=+1234 if int(num[1])<0:     for i in range(abs(int(num[1]))):         num_1.insert(1,'0')#在正负号后面添加0     num_1.insert(2,'.')#在第一个零后面添加小数点 else:     for i in range(int(num[1])-len(num_1)+2):         #设置添加0的个数,2指的是小数点跟正负号所占的位置         num_1.append('0')#添加0 if '+' in num_1:     num_1.remove('+')#如果是正数,就移除正号 for i in num_1:     print(i,end='')

编辑于 2019-07-20 14:08:10 回复(0)
import re

if __name__ == '__main__':
    x = input()
    regex = re.compile(r'([+\-])([1-9]).([0-9]+)E([+\-][0-9]+)')
    sign, part1, part2, exp = regex.match(x).groups()
    if int(exp) > 0:
        part2 += '0' * (int(exp) - len(part2))
        part2 = list(part2)
        part2 = part2.insert(int(exp), '.') if int(exp) > len(part2) else part2
        part2.insert(0, part1)
        result= part2 if sign == '+' else part2.insert(0, '-')
    else:
        part2 = part1 + part2
        part2 = '0' * (-int(exp)) + part2
        part2 = list(part2)
        part2.insert(1, '.')
        result = part2 if sign == '+' else part2.insert(0, '-')   # None
    r = ''
    for x in part2:
        r += x
    print(r)
发表于 2019-05-13 20:40:42 回复(0)
[number,power] = input().split('E')
Output = []
if number[0] == "-":
    Output.append(number[0])
move = int(power)
if move < 0:
    for i in range(abs(move)):
        Output.append('0')
    for i in range(len(number)-1):
        Output.append(number[i+1])
    if Output[0] != '-':
        Output[abs(move)],Output[abs(move)+1] = Output[abs(move)+1],Output[abs(move)]
        Output[1],Output[abs(move)] = Output[abs(move)],Output[abs(1)]
    else:
        Output[abs(move)+1],Output[abs(move)+2] = Output[abs(move)+2],Output[abs(move)+1]
        Output[2],Output[abs(move)+1] = Output[abs(move)+1],Output[2]
elif move >= 0:
    LNumber = number.split('.')[1]
    Output.append(number[1])
    if move < len(LNumber):
        for i in range(move):
            Output.append(number[3+i])
        Output.append('.')
        for i in range(len(LNumber)-move):
            Output.append(number[3+move+i])
    elif move >= len(LNumber):
        Output += number[3:]
        for i in range(move-len(LNumber)):
            Output.append('0')
output = ''.join(Output)
print(output)

发表于 2019-03-08 09:16:46 回复(0)

python语言

try:
    while True:
        string = input()
        left,right = string.split('E')  #left代表数值部分
        pointIndex = 1                #记录之前小数点位置
        left = left[1:].replace(".","")   #把小数点去掉
        right = int(right)            #右边指数部分
        if right > 0:
            if right+pointIndex >= len(left):    #指数+小数点位置超过数值长度就是在数值后面+0
                result = left+"0"*(right+pointIndex-len(left))
            else:       #否则在数值中间找到对的位置插入点
                result = left[:right+pointIndex] + "." + left[right+pointIndex:]
        else:
            if right<0:    #左移确保指数不为零,第一位移动很重要,剩余位都是插零了
                result = "0."+'0'*(-pointIndex-right)+left
            else:
                result = left
        if string[0] == '-':
            print('-'+result)
        else:
            print(result)

except Exception:
    pass
编辑于 2018-09-21 16:56:26 回复(1)
scientific_num = input()

# 小数点的下标
point_index = scientific_num.find('.')
# E的下标
e_index = scientific_num.find('E')
# 幂指数
index = int(scientific_num[e_index+2:])
# 小数位数
decimal_num = e_index-1-point_index
# 去掉小数点后的数值
num = scientific_num[1:e_index].replace('.', '')

# 分为两种情况讨论,一种是正数,一种是负数,通过小数点的移动来得出普通数
if scientific_num[e_index+1] == '+':
    # 需要在后面补全0的情况
    if decimal_num <= index:
        ordinary_num = num + '0'*(index-decimal_num)
    # 不需要补0的情况
    else:
        ordinary_num = num[:index+1] + '.' + num[index+1:]
else:
    ordinary_num = '0.' + '0'*(index-1) + num

if scientific_num[0] == '-':
    ordinary_num = '-' + ordinary_num
print(ordinary_num)

编辑于 2017-11-27 23:59:31 回复(0)