首页 > 其他 > 详细

PAT - A1073

时间:2020-02-28 09:13:54      阅读:57      评论:0      收藏:0      [点我收藏+]

1073 Scientific Notation (20point(s))

  • 小数点移动的边界条件
    • 小数点左移
      • 超过数据左边界
    • 小数点右移
      • 未超过数据右边界
      • 超过数据右边界
      • +0.1E+2 --> 10 当科学计数法首位为0时,输出略过0
  • 源码
#include<bits/stdc++.h>

using namespace std;
bool nsign = true; // T -> + F -> -
int pos; // 小数点位置
char A[10000]; // 初值为0
char In[10000]; // 输入字符串

int getexp(char S[]);

int main(void) {
    int index = 0; // 输入字符串索引
    int index_A = 0; // 生成字符串索引
    scanf("%s", In);
    if (In[0] == '-') nsign = false;

    for (index = 1; In[index] != 'E'; ++index) {
        if (In[index] != '.') {
            A[index_A++] = In[index];
        }
        else pos = index_A; // 一般来说等于 2
    }
    // 退出循环时 In[index] == 'E'

    pos = pos + getexp(In + index + 1); // 得到指数数值,确定小数点位置

    if (In[0] == '-') printf("-");

    if (pos <= 0) {
        for (int i = pos - 1; i < index_A; ++i) {
            if (i < 0) {
                printf("0");
                if (i == pos - 1) printf(".");
            }
            else printf("%c", A[i]);
        }
    } else if (pos > 0 && pos < index_A) {
        for (int i = 0; i < index_A; ++i) {
            if (i == pos) printf(".");
            printf("%c", A[i]);
        }
    } else if (pos >= index_A) {
        for (int i = 0; i < pos; ++i) {
            if (i < index_A) printf("%c", A[i]);
            else printf("0");
        }
    }

    printf("\n");

    return 0;
}

int getexp(char S[]) {
    int exp = 0;
    for (int i = 1; i < strlen(S); ++i)
        exp = exp * 10 + S[i] - '0';
    if (S[0] == '-') exp = -exp;
    return exp;
}

PAT - A1073

原文:https://www.cnblogs.com/XyLee/p/12375544.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!