pat乙级真题:1024. 科学计数法 (20)
2017-11-20 01:03
429 查看
题目连接
点击打开链接
解题思路
把输入的科学计数法字符串拆分为指数部分和数字部分,并把指数部分的字符串转化为数字num。对指数部分为正和为负时分别处理。为负时,小数点前移,输出0.后继续输出num-1个0,之后把zhengshu字符串的非.部分全部输出即可。若指数部分为正时,分两种情况处理。一种是数字没有小数部分了,那就只需要把数字部分中的小数点后的数字分别
往前移动一个位置,并把小数点放在zhengshu[num+1]的位置。由于最初已经把zhengshu字符串数组全部用'0'初始化了,因此这时只需要把zhengshu字符串一直输出到小数点
所在的位置即可。一种情况是数字仍然有小数部分,那就只需要吧zhengshu字符串从头输出到尾即可。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> /******************************************************************************************************* *函数功能:输入,并拆分出数字部分、指数部分。 *变量: * num----存储输入的科学计数法字符串 * _zhengshu ---存储数字部分 * _zhishu----存储指数部分 * flag----对应指数符号。1 -- + 0 -- - * j ---- j最终返回的是指数部分该放'\0'的位置。 * **********************************************************************************************************/ int inputAndDeal(char _num[], char _zhengshu[], char _zhishu[]){ int i, j,flag; scanf("%s", _num); for (i = 1; _num[i] != 'E'; i++){ _zhengshu[i - 1] = _num[i]; } _zhengshu[i - 1] = '\0'; i++; if (_num[i] == '+') flag = 1; else flag = 0; i++; j = 0; for (; _num[i]; i++) _zhishu[j++] = _num[i]; _zhishu[j] = '\0'; return flag; } int main(){ char num[10002], zhengshu[30002], zhishu[10002]; memset(zhengshu, '0', 30002); int i, j, flag, zhishu_num, zhengshu_len; flag = inputAndDeal(num, zhengshu, zhishu); if (num[0] == '-') printf("%c", num[0]); zhishu_num = atoi(zhishu); zhengshu_len = strlen(zhengshu); if (flag){ //指数部分为正数,因此处理小数点后移的情况 zhengshu[zhengshu_len] = '0'; //用'0'替换'\0' for (i = 0; i<zhishu_num; i++) //整数部分前移 zhengshu[i + 1] = zhengshu[i + 2]; zhengshu[i + 1] = '.'; //插入小数点 if (zhengshu_len - 2 > zhishu_num){ //若最终得到的数字还有小数 for (j = 0; j<zhengshu_len; j++) printf("%c", zhengshu[j]); } else{ //若最终得到的数字没有小数部分 for (j = 0; zhengshu[j] != '.'; j++) printf("%c", zhengshu[j]); } } else{ //指数部分为负,即小数点前移。 zhengshu[zhengshu_len] = '\0'; printf("0."); for (i = 0; i<zhishu_num - 1; i++) printf("0"); for (i = 0; zhengshu[i]; i++){ if (zhengshu[i] != '.') printf("%c", zhengshu[i]); } } return 0; }
相关文章推荐
- 1024. 科学计数法 (20) PAT乙级真题
- 1024. 科学计数法 (20)--浙大PAT乙级真题java实现
- 1024. 科学计数法 (20)-PAT乙级真题
- pat 乙级 1024. 科学计数法 (20)
- PAT乙级1024(C语言)-科学计数法 (20)
- PAT 乙级练习题1024. 科学计数法 (20)
- PAT乙级 1024. 科学计数法 (20)
- 浙江大学PAT_乙级_1024. 科学计数法 (20)
- 1024. 科学计数法 (20)(PAT乙级题库)
- PAT 乙级 1024. 科学计数法 (20)
- PAT乙级.1024. 科学计数法 (20)
- 1024. 科学计数法 (20)--PAT乙级
- PAT乙级—1024. 科学计数法 (20)-native
- 【PAT】(乙级)1024. 科学计数法 (20)
- [PAT乙级]1024. 科学计数法 (20)
- PAT 乙级 1024. 科学计数法 (20)
- 乙级 PAT 1024. 科学计数法 (20)
- PAT乙级1024. 科学计数法 (20)
- PAT乙级1024. 科学计数法 (20)
- PAT乙级 1024. 科学计数法 (20)