首页 > 代码库 > PAT 1024. 科学计数法 (20)

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;}

 



PAT 1024. 科学计数法 (20)