1024. 科学计数法 (20)

本文介绍了一个程序,用于将科学计数法表示的数字转换为普通数字表示法,确保所有有效数字被正确保留,包括末尾的0。程序通过字符串操作实现了这一转换过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string s;
    int z = 0;
    cin >> s;
    if (s[0] == '-')cout << '-';
    string s1(s, 1, s.find('E') - 1);//s1是E前面的部分
    int it = s.find('E') + 2;
    string s2(s, it);//s2是E后面的部分
    z = stoi(s2);
    if (z == 0) {
        cout << s1; system("pause"); return 0;
    }
    /******************************************/
    string ss(s1);
    ss.replace(s1.find('.'), 1, "");//remove the point, all those possibilites need to do this this move is dengrous, because you change the length of the s1, so I use the copy of the s1. if you have to change an important value, make a copy of it in case you use the poperty of the old one which hasn't been changed.
    if (s[it - 1] == '-') {//小数点往左走
        ss.insert(0, "0.");
        ss.insert(2, z - 1, '0');
        cout << ss;
    }
    else if (z + 2 < s1.length()) {//小数点没出去
        ss.insert(z+1,1,'.');
        cout << ss;
    }
    else {
        ss.append(z - (s1.length() - s1.find('.')) + 1, '0');//逻辑比较饶。
        cout << ss;
    }
    system("pause");
}

这是一个让我受益匪浅的题目,这才叫真正的字符串处理。
1.string 从里一个 string 里初始化:string s(s1,pos)//pos是代表位置,从此位置以后的s1拷贝到s中。
2.string的操作:insert,replace , append(insert可以代替)
insert(pos,arg)pos之前,
replace(pos,len,arg)
最基础的用法:字符串就不要管,如果插得是字符,则要加一个参数n。
即 arg=(n,c)或(srt)

Python中的科学计数法可以使用字符"E"或"e"来表示。例如,1.23400E-03表示1.23400乘以10的负3次幂,即0.00123400。 在Python中,可以使用eval()函数来解析并执行以字符串形式表示的科学计数法,并将结果输出。可以使用这个函数来计算科学计数法表示的数值。 对于复数类型,可以使用虚数单位"j"或"J"来表示。例如,12.3+4j表示实部为12.3,虚部为4的复数。 通过使用实数部的属性.z.real和虚数部的属性.z.imag,可以别获得复数的实数部和虚数部。例如,对于复数z=1.23e-4+5.6e89j,z.real的值为0.000123,z.imag的值为5.6e89。 在Python中,还可以使用不同的进制来表示数值。例如,0x或0X表示十六进制,0b或0B表示二进制,0o或0O表示八进制。 对于给定的测试用例,可以使用正则表达式re来判断是否存在科学计数法的表示,然后根据指数的正负和大小,进行相应的操作来转换为普通数字表示法。 以下是一个示例代码,可以将科学计数法转换为普通数字表示法: import re s = re.compile("E") n = input() m = s.split(n) a = m b = int(m) if a == " ": c = "" else: c = "-" if b < 0: print(c + "0." + "0"*(abs(b)-1) + a[1:2] + a[3:]) elif b == 0: print(c + a[1:]) elif 0 < b < len(a[3:]): print(c + a + a[3:b+3] + "." + a[b+3:]) elif b == len(a[3:]): print(c + a + a[3:]) elif b > len(a[3:]): print(c + a + a[3:] + "0"*(b-len(a[3:]))) 这段代码将输入的科学计数法表示的实数转换为普通数字表示法的输出。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Python----科学计数法、同时给多个变量赋值、eval函数、math库函数、复数(complex())、内置的数值运算...](https://blog.csdn.net/m0_56501550/article/details/127625366)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [1024. 科学计数法 (20) python篇](https://blog.csdn.net/zjw_python/article/details/68941738)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值