码迷,mamicode.com
首页 > 其他好文 > 详细

PAT-BASIC-1024-科学计数法

时间:2015-07-12 18:55:42      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:

科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][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

模拟地好烦......
技术分享
#include<iostream>
#include<sstream>
#include<cmath>
#include<vector>
#include<string>
using namespace std;

int main()
{
    int i, j, m, n, mark, value1, k, value2;
    string s1, zhishu = "";
    cin >> s1;
    if (s1[0] == +){
        for (i = 1; i < s1.length(); i++){
            if (s1[i] == E){
                mark = i;
                break;
            }
        }
        for (j = mark + 2; j < s1.length(); j++) {
            zhishu = zhishu + s1[j];
        }
        value1 = atoi(zhishu.c_str());

        if (s1[mark+1] == -){

            cout << 0 << ".";
            value1--;
            while (value1){
                cout << 0;
                value1--;
            }
            for (m = 1; m < mark; m++){
                if (m != 2){
                    cout << s1[m];
                }
            }
        }
        else if (s1[mark+1] == +){
            if (value1 < mark - 3) {
                for (int l = 1; l < mark; l++){
                    if (l != 2){
                        if (l - 2 == value1){
                            cout << s1[l] << ".";
                        }
                        else{
                            cout << s1[l];
                        }
                    }
                }
            }
            else if (value1 >= mark - 3) {
                for (n = 1; n < mark; n++){
                    if (n != 2){
                        cout << s1[n];
                    }
                }
                for (m = 0; m < value1 + 3 - mark; m++){
                    cout << 0;
                }
            }
        }
    }
    if (s1[0] == -){
        for (i = 1; i < s1.length(); i++){
            if (s1[i] == E){
                mark = i;
                break;
            }
        }
        for (j = mark + 2; j < s1.length(); j++) {
            zhishu = zhishu + s1[j];
        }
        value2 = atoi(zhishu.c_str());

        if (s1[mark+1] == -){
            cout << "-" << 0 << ".";

            value2--;
            while (value2){
                cout << 0;
                value2--;
            }
            for (n = 1; n < mark; n++){
                if (n != 2){
                    cout << s1[n];
                }
            }
        }
        else if (s1[mark+1] == +){
            cout << "-";
            if (value2 >= mark - 3) {
                for (n = 1; n < mark; n++){
                    if (n != 2){
                        cout << s1[n];
                    }
                }
                for (m = 0; m < value2 + 3 - mark; m++){
                    cout << 0;
                }
            }
            else if (value2 < mark - 3){
                for (n = 1; n < mark; n++){
                    if (n != 2){
                        if (n - 2 == value2){
                            cout << s1[n] << ".";
                        }
                        else{
                            cout << s1[n];
                        }
                    }
                }
            }
        }
    }
    return 0;
}
CAPOUIS‘CODE

 

PAT-BASIC-1024-科学计数法

标签:

原文地址:http://www.cnblogs.com/capouis/p/4641287.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!