【1073】Scientific Notation (20 分)

简介: 【1073】Scientific Notation (20 分)【1073】Scientific Notation (20 分)
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<algorithm>  
#include<map>
#include<vector>
#include<queue> 
using namespace std;  
key:注意指数为正时的小数点的移动!!! 和 是否有多余0的输出
int main(){   
  char str[10010];
  cin>>str;
  int len=strlen(str);
  if(str[0]=='-')  printf("-"); //如果是负数则输出负号
  int pos=0; //pos存放字符串中E的位置
  while(str[pos] !='E'){
    pos++;
  }
  int exp=0; //exp存放指数(先不考虑正负)
  for(int i=pos+2;i<len;i++){
    exp=exp*10+(str[i]-'0');
  }
  if(exp==0){ //特判指数为0的情况
    for(int i=1;i<pos;i++){
      printf("%c",str[i]); //直接输出E前数值
    }
  }
  if(str[pos+1] == '-'){ //如果指数为负
    printf("0.");
    for(int i=0;i<exp-1;i++){//输出(exp-1)个0
      printf("0");
    }
    printf("%c",str[1]);
    //输出除了小数点以外的数字
    for(int i=3;i<pos;i++){
      printf("%c",str[i]);
    }
  }else{  //如果指数为正
      for(int i=1;i<pos;i++){ //输出小数点移动之后的数
        if(str[i] == '.')  continue; //略过小数点
        printf("%c",str[i]); //输出当前数位
        if(i == exp+2&&pos-3!=exp){ //小数点加在位置(exp+2)上
          //原小数点和E之间的数字个数(pos-3)不能等于小数点右移位数exp
          printf(".");
        }
      }
      //如果指数exp较大,输出多余的0
      for(int i=0;i<exp-(pos-3);i++){
        printf("0");
      }
  }
  system("pause"); 
    return 0;   
}
相关文章
|
11月前
|
C++
【PAT甲级 - C++题解】1073 Scientific Notation
【PAT甲级 - C++题解】1073 Scientific Notation
50 0
|
前端开发 JavaScript 测试技术
类型体操之实现 type-challenges 中的 built-in 的所有类型
#built-in 是 type-challenges 库中的一个 tag,里面一共包括了 7 个类型,其中前两个就是之前介绍过的 类型体操之实现 Pick 和 Omit 中的 Pick 和 Omit
Data Structures and Algorithms (English) - 6-7 Isomorphic(20 分)
Data Structures and Algorithms (English) - 6-7 Isomorphic(20 分)
106 0
Data Structures and Algorithms (English) - 6-15 Iterative Mergesort(25 分)
Data Structures and Algorithms (English) - 6-15 Iterative Mergesort(25 分)
168 0
Data Structures and Algorithms (English) - 6-8 Percolate Up and Down(20 分)
Data Structures and Algorithms (English) - 6-8 Percolate Up and Down(20 分)
87 0
PAT (Basic Level) Practice (中文)- 1034 有理数四则运算(20 分)
PAT (Basic Level) Practice (中文)- 1034 有理数四则运算(20 分)
80 0
PAT (Basic Level) Practice (中文)- 1051 复数乘法(15 分)
PAT (Basic Level) Practice (中文)- 1051 复数乘法(15 分)
83 0
【1108】Finding Average (20分)【字符串处理】
【1108】Finding Average (20分)【字符串处理】 【1108】Finding Average (20分)【字符串处理】
66 0
【1088】Rational Arithmetic (20 分)
【1088】Rational Arithmetic (20 分) 【1088】Rational Arithmetic (20 分)
83 0
【1022】Digital Library (30 分)
【1022】Digital Library (30 分) 【1022】Digital Library (30 分)
74 0