IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 1024 科学计数法 (20 分)C语言 -> 正文阅读

[C++知识库]1024 科学计数法 (20 分)C语言

1024 科学计数法 (20 分)

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

C语言代码(纯原创):

#include<stdio.h>

#include<string.h>

#include<math.h>

int main(){

????int i,le,ri;

????le=0;ri=0; //记录‘E’前的数目和‘E’后的数目

????int zhishu;

????zhishu=0;

????char ch[100000],l[100000],r[100000];

scanf("%s",ch);

//将输入的字符串分为两个部分,即带符号的数字部分和带符号的指数部分

????for(i=0;ch[i]!='\0';i++){

????????if(ch[i]!='E'){

????????????l[i]=ch[i];

????????????le++;

????????}

????????else break;

????}

????for(i=le+1;ch[i]!='\0';i++){

????????r[ri]=ch[i];

????????ri++;

}

//将指数部分由字符串型转化为整型

????for(i=1;i<ri;i++){

????????zhishu=zhishu+(r[i]-'0')*pow(10,ri-1-i);

}

//分类讨论,指数为正时右移

????if(r[0]=='+'){

????????if(l[0]=='+') printf("%d",l[1]-'0');

????????else printf("-%d",l[1]-'0');

????????if(zhishu>le-3){

????????????for(i=3;i<le;i++){

????????????????printf("%d",l[i]-'0');

????????????}

????????????for(i=0;i<zhishu-le+3;i++){

????????????????printf("0");

????????????}

????????}

????????else{

????????????for(i=3;i<zhishu+3;i++){

????????????????printf("%d",l[i]-'0');

????????????}

????????????if(zhishu!=le-3) printf("."); //注意右移后若为整数,不要打点!!

????????????for(i=zhishu+3;i<le;i++){

????????????????printf("%d",l[i]-'0');

????????????}

????????}

}

//指数为负时左移

????else if(r[0]=='-'){

????????if(zhishu!=0){

????????????if(l[0]=='+') printf("0.");

????????????else printf("-0.");

????????????for(i=0;i<zhishu-1;i++){

????????????????printf("0");

????????????}

????????????for(i=1;i<le;i++){

????????????????if(l[i]!='.') printf("%d",l[i]-'0');

????????????????else printf("");

????????????}

????????}

????????else{ //指数为0时不移动直接将数字部分输出

????????????if(l[0]=='+') printf("");

????????????else printf("-");

????????????for(i=1;i<le;i++){

????????????????if(l[i]!='.') printf("%d",l[i]-'0');

????????????????else printf(".");

????????????}

????????}

????}

????printf("\n");

????return 0;

}

以下是我解题时草稿上画的表格,感觉画表格对数组这类题目来说比较好理清思路

+

1

.

2

3

4

0

0

E

-

0

3

ch

0

1

2

3

4

5

6

7

8

9

10

11

l

0

1

2

3

4

5

6

7

le=8

r

0

1

2

ri=3

主体思路:将输入的科学计数法分为两个部分,通过对指数部分的分类讨论实现题目要求。emmm...第一次发布文章。没有借鉴其他人的代码,一步一步试错试出来的,感觉蛮有成就,就想着试一下发布博客。当然,我认为我的代码一定还是太多太麻烦了,但是我觉得应该很好理解,并且思路清晰。谢谢大家阅读!

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-24 00:01:57  更:2021-07-24 00:02:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/8 7:17:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码