PAT乙级|C语言|1024 科学计数法 (20分)

题目

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

  • 要求有效位被保留。而至于无效的0不去掉也能通过,如下:

输入

0.001E2

输出

0001
  • 以下代码没有去掉无效位,用了几个字符串处理函数,也可以自己写语句实现
#include
#include
int main(){
    char number[20000],*p_int,*p_flo,*p_pow;
    
    gets(number);
    p_int=strtok(number,".");     //字符型整数部分
    p_flo=strtok(NULL,"E"); 	  //字符型小数部分
    p_pow=strtok(NULL,"E");       //字符型指数部分
    int interger,pow;
    interger=atoi(p_int);        //获得int型整数部分
    pow=atoi(p_pow);			 //获得int型指数部分
    if(pow>=0){	//指数大于0
        printf("%d",interger);   //输出整数部分
        int i;
        for(i=0;*p_flo;i++,p_flo++){	//输出小数部分
            if(i==pow)printf(".");	//相应位置加小数点
			printf("%c",*p_flo);
        }
        while(i<pow){	//补零
        	printf("0");
        	i++;
		}
    }
    else{	//指数小于零
		if(interger<0){  //整数部分小于零
			printf("-");	//输出负号
			interger=-interger;
		}		   
        pow=-pow;  
        for(int i=0;i<pow;i++){	//小数点前移,补零
            printf("0");
            if(i==0)printf(".");
        }
        printf("%d%s",interger,p_flo);
    }
    return 0;
}

你可能感兴趣的:(PAT乙级一天一题/C语言)