编写一个程序利用科学计数法输入一个数(字符串)转换成对应的实数
编写一个程序利用科学计数法输入一个数(字符串)转换成对应的实数
lz凑活看
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int main()
{
bool Mflag=false,Eflag=false;
int i,j,k,g;
int M_count=0,E_count=0;
double M_int=0,E=0,M_float=0,M=0;
char data[100];
printf("请以“#”号结尾(允许有空格),例如:3.64 e-6\n");
printf("输入数值:");
gets(data);
for(i=0,j=0;data[i]!='\0';i++)
{
if(data[i]==' ')
continue;
data[j]=data[i];
j++;
}
for(i=0;data[i]!='#';i++)
{
if(data[i]=='-'||data[i]=='+'||data[i]=='.'||data[i]=='e'||data[i]=='E'||data[i]=='#')
continue;
if(data[i]<47||data[i]>57)
{
printf("Error!");
exit(0);
}
}
for(i=0;data[i]!='E'&&data[i]!='e'&&data[i]!='#';i++)
{
if(data[i]=='-')
continue;
if(data[i]=='.')
break;
if(46<data[i]&&data[i]<58)
M_count++;
} //尾数整数位数
for(i=0;data[i]!='E'&&data[i]!='e'&&data[i]!='#';i++);
for(;data[i]!='#';i++)
{
if(data[i]=='-'||data[i]=='E'||data[i]=='e')
continue;
E_count++;
}
for(i=0,j=M_count-1;j>=0&&data[i]!='e'&&data[i]!='E'&&data[i]!='.';i++)
{
if(data[i]=='-')
{
Mflag=true;
continue;
}
else
{
M_int+=(data[i]-48)*pow(10,j);
j--;
}
}
if(data[i]=='.')
{
for(i=i+1,k=1;data[i]!='e'&&data[i]!='E';i++,k++)
M_float+=(data[i]-48)*pow(10,-1*k);
}
if(data[i]=='E'||data[i]=='e')
{
for(i=i+1,g=E_count-1;data[i]!='#';i++)
{
if(data[i]=='-')
{
Eflag=true;
continue;
}
E+=(data[i]-48)*pow(10,g);
g--;
}
}
M=M_int+M_float;
if(Mflag==true)
M=M*(-1);
if(Eflag==true)
E*=-1;
printf("%f",M*pow(10,E));
printf("\n");
return 0;
}