• PAT 1024. 科学计数法 (20)


    1024. 科学计数法 (20)

    时间限制
    100 ms
    内存限制
    65536 kB
    代码长度限制
    8000 B
    判题程序
    Standard
    作者
    HOU, Qiming

    科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][1-9]"."[0-9]+E[+-][0-9]+,即数字的整数部分只有1位,小数部分至少有1位,该数字及其指数部分的正负号即使对正数也必定明确给出。

    现以科学计数法的格式给出实数A,请编写程序按普通数字表示法输出A,并保证所有有效位都被保留。

    输入格式:

    每个输入包含1个测试用例,即一个以科学计数法表示的实数A。该数字的存储长度不超过9999字节,且其指数的绝对值不超过9999。

    输出格式:

    对每个测试用例,在一行中按普通数字表示法输出A,并保证所有有效位都被保留,包括末尾的0。

    输入样例1:
    +1.23400E-03
    
    输出样例1:
    0.00123400
    
    输入样例2:
    -1.2E+10
    
    输出样例2:
    -12000000000
    /* 学了几个C++处理字符串的常用函数
       1. strtok 分割字符串
       2. atof() 将字符串转化为数值
    */
    #include "iostream"
    #include "vector"
    #include <string.h> 
    using namespace std;
    int main()
    {
        int len;
        vector<char*>v;
        char str[20005];
        char *p;
        cin >> str;
        p = strtok(str,"E"); /* 将字符串按E分割 */
        while (p != NULL) {
            v.push_back(p);
            p = strtok(NULL, "E");
        }
        len = strlen(v[0]); /* 记录v[0]的长度 */
        int offset = atof(v[1]); /* 记录小数点要偏移的位数 */
        if (v[0][0] == '-') /* 第一个元素为负号 输出*/
            cout << "-";
        if (offset == 0) {
            cout << v[0];
        }
        else if (offset < 0) { /* 指数为负数 */
            for (int i = 0; i < -offset; i++)
            {
                if (i == 0)
                    cout << "0.";
                else
                    cout << "0";
            }
            for (int i = 1; i < len; i++) {
                if (v[0][i] == '.')
                    continue;
                else
                    cout << v[0][i];
            }
        }
        else {  /* 指数为正数 */
            int k=0;
                for (int i = 1; i < len; i++) { /* 改变小数点的位置 */
                if(v[0][i]!='.'){
                    cout << v[0][i];
                    k++;
                }
                if ((k - 1 == offset) && (k != len -2)) {
                    cout << ".";
                }
                }
                /* 输出需要添加的零 */
                while (k <= offset) {
                    cout << "0";
                    k++;
                }
        }
        cout << endl;
    }


  • 相关阅读:
    7.node.js的3DES 加密和解密的方法封装
    6.js 获取当前日期时间3种格式化方法
    2.深入解析Javascript异步编程
    5.js中的判断if和for
    4.js中的函数与方法
    String、StringBuffer、StringBuilder效率测试
    String、StringBuffer、StringBuilder区别
    StringBuffer常用方法
    SQL面试题
    String字符串拼接
  • 原文地址:https://www.cnblogs.com/minesweeper/p/5940394.html
Copyright © 2020-2023  润新知