#include <stdio.h>
#include <string.h>
#include <math.h>
int char_int(char* a, int qidian,int zhongdian) // 计算指数大小
{
int i;
int len = zhongdian - qidian;
int num[len];
int j = 0;
int sum = 0;
for(i = qidian; i < zhongdian ; i ++)
{
num[j] = (int)(*(a+i) - '0');
j ++;
}
for(i = len - 1; i >= 0; i --)
{
sum = sum + num[i]*pow(10,(zhongdian - qidian - 1 - i));
}
return sum;
}
int main()
{
char cnum[10000];
scanf("%s",cnum);
int i;
int flag_num;//判断正负 0 - ;1 +
int flag_e;//判断正负 0 - ;1 +
int point_e; // 找到e的位置。
int point_flag_e;
//===============判断两个符合正负======================
for(i = 0; i < strlen(cnum);i ++)
{
if(cnum[0] == '-')
{
flag_num = 0;
}
if(cnum[0] == '+')
{
flag_num = 1;
}
if(*(cnum+i) == 'E')
{
point_e = i;
point_flag_e = i + 1;
}
}
if(cnum[point_flag_e] == '-')
{
flag_e = 0;
}
if(cnum[point_flag_e] == '+')
{
flag_e = 1;
}
//===============================================
int n;
n = char_int(cnum,point_flag_e + 1,strlen(cnum));//e 后面的数字
int num_cout = point_flag_e - 3; //e以前数字个数
//========================================
if(flag_num == 0)
printf("-");
if(flag_e == 0)
{
printf("0.");
for(i = 1 ; i <= n - 1; i ++)
{
printf("0");
}
printf("%c",*(cnum+1));//第一个数字
for(i = 3; i < point_flag_e - 1; i ++)
{
printf("%c",*(cnum+i));
}
}
else
{
if(num_cout <= n)
{
printf("%c",*(cnum+1));
for(i = 3; i < 3 + num_cout - 1; i ++)
{
printf("%c",*(cnum+i));
}
for(i = 1; i <= n - num_cout + 1 ; i ++)
{
printf("0");
}
}
else
{
printf("%c",*(cnum+1));
for(i = 3; i <= 3 + n - 1; i ++)
{
printf("%c",*(cnum+i));
}
if(num_cout - 1 != n)//测试点三四
printf(".");
for(i = 3 + n ; i <= point_flag_e-2 ; i ++)
{
printf("%c",*(cnum+i));
}
}
}
return 0;
}
PTA1024-C语言-科学计数法
最新推荐文章于 2024-12-25 22:03:31 发布