算法题:科学计数法

题目描述

科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][1-9]”.”[0-9]+E[+-][0-9]+,即数字的整数部分

只有1位,小数部分至少有1位,该数字及其指数部分的正负号即使对正数也必定明确给出。

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

输入描述:

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

输出描述:

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

输入例子:

+1.23400E-03

输出例子:

0.00123400

#include <iostream>
#include <string.h>
using namespace std;
int GetNum(char *str)
{
    char *p = str;
    int count = 0;
    while (*p == ‘0‘)p++;
    while (*p != NULL)
    {
        count = count * 10 + *p - ‘0‘;
        p++;
    }
    return count;
}
void SetStr(char *&str, int n)
{
    string s;
    char *s1 = strtok(str, ".");
    int len1 = 0;
    if (s1[0] == ‘+‘ || s1[0] == ‘-‘)
    {
        if (s1[0] == ‘-‘)
        {
            s += ‘-‘;
            s1++;
        }
        if (s1[0] == ‘+‘)s1++;
        len1 = strlen(s1);
    }
    else len1 = strlen(s1);
    if (n < len1)
    {
        int i = len1 - n;
        while (i--)
        {
            s += *s1;
            s1++;
        }
        s += ‘.‘;
        s += s1;
    }
    else
    {
        s += "0.";
        int i = n - len1;
        while (i--)
        {
            s += ‘0‘;
        }
        s += s1;
    }
    s1 = strtok(NULL, "\0");
    if (s1!=NULL)
    s += s1;
    cout << s.c_str() << endl;
}
void SetTtr(char *str,int n)
{
    string s;
    if (str[0] == ‘+‘ || str[0] == ‘-‘)
    {
        if (str[0] == ‘-‘)
        {
            s += ‘-‘;
        }
        str++;
    }
    char *s1 = strtok(str,".");
    if (strlen(s1) == n)
    {
        s += s1;
        while (n--)
        {
            s += ‘0‘;
        }
    }
    else
    {
        s += s1;
        s1 = strtok(NULL,"\0");
        while (*s1!=‘\0‘ && n--)
        {
            s += *s1;
            s1++;
        }
        if (*s1 == ‘\0‘)
        {
            while (n--)
            {
                s += ‘0‘;
            }
        }
        else
        {
            s += ‘.‘;
            s += s1;
        }
    }
    cout << s.c_str() << endl;
}
int main()
{
    char inputStr[10000];
    cin >> inputStr;

    char *s1 = strtok(inputStr,"E");
    char *saveStr1 = new char[strlen(s1)+1];
    strcpy(saveStr1,s1);

    s1 = strtok(NULL,"\n");
    char *saveStr2 = new char[strlen(s1) + 1];
    strcpy(saveStr2,s1);

    char ch = saveStr2[0];
    int N;
    char *p = NULL;
    switch (ch)
    {
    case ‘+‘:
        p = saveStr2;
        N = GetNum(++p);
        SetTtr(saveStr1, N);
        break;
    case ‘-‘:
            p = saveStr2;
            N = GetNum(++p);
            SetStr(saveStr1,N);
            break;
    default:break;
    }

    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-13 22:24:11

算法题:科学计数法的相关文章

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,并保证所有有效位

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,并保证所有有效位

解决HTML导出Excel表数字变成科学计数法

在做项目中,碰到如题的问题.比如要将居民的信息导出到excel中,居民的身份证号码因为长度过长(大于10位),excel会自动的将过长的数字串转换成 科学计数法.现在网上找到解决方案之一: (在数字串前后加 " " 或' ' 或 tab等空白内容都是行不通的,excel会自动去掉这些.除非你在数字串中间加,当然这样就不是我们要的结果了) 解决方案之一:<td style="mso-number-format:'\@';">1008211999090912

关于JS数学计算精度不准和自动转科学计数法的问题

在javaScript中,数学计算是一个很坑爹的问题, 由于系统二进制转十进制的误差,导致浮点数的运算精度很不理想,经常会出现一些意想不到的问题. 而js自动将小数转为科学计数法的问题,也让一些自己写数学插件的同学痛苦不已. 第一个,浮点数计算精度: 比如:1.2*3 = 3.599999999.... 解决办法: ⑴将浮点数乘以10的n次幂化为整数,再进行计算,之后再除以10的n次幂,就可以得到我们想要的数值.即:1.2*3 = 12*3/10 = 3.6;(n为小数点后数位之和); 至于多个

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,并保证所有有效位

1024. 科学计数法 (20)

科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][1-9]"."[0-9]+E[+-][0-9]+,即数字的整数部分只有1位,小数部分至少有1位,该数字及其指数部分的正负号即使对正数也必定明确给出. 现以科学计数法的格式给出实数A,请编写程序按普通数字表示法输出A,并保证所有有效位都被保留. 输入格式: 每个输入包含1个测试用例,即一个以科学计数法表示的实数A.该数字的存储长度不超过9999字节,且其指数的绝对值不超过9999. 输出格式: 对每个测

将258.369 double值转为内存表示(科学计数法)

前言 庖丁解牛 - <<庄子>> 庖丁为文惠君解牛,手之所触, 肩之所倚, 足之所履, 膝之所踦, 砉然向然, 奏刀騞然, 莫不中音, 合于<桑林>之舞, 乃中<经首>之会. 文惠君曰:"嘻, 善哉! 技盍至此乎?" 庖丁释刀对曰:"臣之所好者, 道也, 进乎技矣.始臣之解牛之时, 所见无非牛者.三年之后, 未尝见全牛也.方今之时, 臣以神遇而不以目视, 官知止而神欲行.依乎天理, 批大郤, 导大窾, 因其固然, 技经肯綮之未尝

Java科学计数法

如果数是: 0.0004 使用科学计数法会变成4.0E-4 解决方案: DecimalFormat dcf = new DecimalFormat("0.0000"); dcf.format(rs.getFloat("shangyuepingjunzhi")) Java科学计数法,布布扣,bubuko.com

科学计数法的值

科学计数法是一种数学专用术语.将一个数表示成 a×10的n次幂的形式,其中1≤|a|<10,n为整数,这种记数方法叫科学计数法.例如920000可以表示为9.2*10^5 现在需要对输入的字符串进行分离,自动识别该科学计数法中的a和幂次,计算其表征的具体数值并输出该值. 例如,对于输入的复数字符串"9.210^5",输出 The actual value for 9.210^5 is 920000 注意: 1.每组测试数据仅包括一个用于科学计数法的字符串. 2.输入字符串保证合法