PAT甲题题解-1073. Scientific Notation (20)-字符串处理
Posted 辰曦~文若
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT甲题题解-1073. Scientific Notation (20)-字符串处理相关的知识,希望对你有一定的参考价值。
题意:给出科学计数法的格式的数字A,要求输出普通数字表示法,所有有效位都被保留,包括末尾的0。
分两种情况,一种E+,一种E-。具体情况具体分析╮(╯_╰)╭
#include <iostream> #include <cstdio> #include <algorithm> #include <string.h> #include <cmath> #define POSITIVE 1 #define NEGATIVE 2 using namespace std; /* 将科学计数法表示的数转换成传统的形式输出 */ const int maxn=80000; char str[maxn]; char expval[maxn]; void printNum(char *num,int idxE,int fraclen,int e,int mark){ //指数为正 if(mark==POSITIVE){ bool flag=false; if(num[0]!=\'0\'){ flag=true; printf("%c",num[0]); } num+=2; int minlen=min(fraclen,e); for(int i=0;i<minlen;i++){ //前面的0直接忽略 if(num[i]!=\'0\'){ flag=true; } if(flag){ printf("%c",num[i]); } } if(e>=fraclen){ for(int i=0;i<e-fraclen;i++) printf("0"); } else{ printf("."); for(int i=0;i<fraclen-e;i++) printf("%c",num[minlen+i]); } } //指数为负 else{ printf("0."); for(int i=0;i<e-1;i++){ printf("0"); } for(int i=0;num[i]!=\'E\';i++){ if(num[i]!=\'.\') printf("%c",num[i]); } } } int main() { scanf("%s",str); int len=strlen(str); int idxE=0; int fracLen; for(int i=0;i<len;i++){ if(str[i]==\'E\'){ idxE=i; //E的索引 break; } } fracLen=idxE-3;//小数部分长度 int explen=0; for(int i=idxE+2;i<len;i++){ expval[explen++]=str[i]; } expval[explen]=\'\\0\'; int e=atoi(expval); if(str[idxE+1]==\'+\'){ if(str[0]==\'-\') printf("-"); printNum(str+1,idxE,fracLen,e,POSITIVE); } else{ if(str[0]==\'-\') printf("-"); printNum(str+1,idxE,fracLen,e,NEGATIVE); } return 0; }
以上是关于PAT甲题题解-1073. Scientific Notation (20)-字符串处理的主要内容,如果未能解决你的问题,请参考以下文章
PAT甲级——1073 Scientific Notation (20分)
PAT(A) 1073. Scientific Notation (20)
[PAT] 1073 Scientific Notation (20 分)Java
PAT 1073 Scientific Notation[字符串处理][科学记数法]