标签:保留 i++ com turn nbsp 字符 sci 题意 class
题意:给出科学计数法的格式的数字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)-字符串处理
标签:保留 i++ com turn nbsp 字符 sci 题意 class
原文地址:http://www.cnblogs.com/chenxiwenruo/p/6390670.html