PAT B1024/A1073科学计数法

问题描述:

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

AC代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define maxn 10010



int main()
{
 //   freopen("input.txt","r",stdin);
    char s[maxn];
    char tail[maxn];
    char index[maxn];
    char sym1,sym2;//记录尾数和指数的符号
    int num;
    scanf("%s",s);//得到s
    int len=strlen(s),i,j;//得到字符串的长度
    sym1=s[0];
    tail[0]=s[1];
    for(i=3;i<len;i++)
    {
        if(s[i]=='E')
        {
            break;
        }
        tail[i-2]=s[i];//
    }
    tail[i]='\0';//得到尾数部分
    i++;//得到E的长度
    sym2=s[i++];//得到指数部分的符号
    for(j=0;(j+i)<len;j++)
    {
        index[j]=s[j+i];
    }
    index[j]='\0';
    num=atoi(index);//指数的数值
    int tlen=strlen(tail);
    if(num==0)//指数为0,尾数原封不动
    {
        if(sym1=='-')printf("%c",sym1);
        for(i=0;i<tlen;i++)
        {
            printf("%c",tail[i]);
            if(i==0)printf(".");
        }
    }
    else if(sym2=='-')//指数为负数
    {
        if(sym1=='-')printf("%c",sym1);
        printf("0.");//得到字符串
        for(int i=1;i<num;i++)//还要打印0,
        {
            printf("0");
        }
        printf("%s",tail);
    }
    else//指数为正数
    {
        if(sym1=='-')printf("%c",sym1);
        if(num<tlen-1)//如果小数部分的长度(tlen-1)大于指数num,那么保留小数点
        {
            for(i=0;i<tlen;i++)
            {
                printf("%c",tail[i]);
                if(num==i)printf(".");//指数为0时,小数点打印i==0时候,平移num个单位后打印小数点的位置为第num个数字后(从0开始)
            }
        }
        else
        {//不需要保留小数点
                printf("%s",tail);//直接打印位数部分
            for(i=0;i<num-(tlen-1);i++)
                printf("0");//补末尾的0;
        }
    }




}

发布了82 篇原创文章 · 获赞 1 · 访问量 1555

猜你喜欢

转载自blog.csdn.net/weixin_43370733/article/details/104072356