64,651
社区成员
发帖
与我相关
我的任务
分享
const int MaxLen = 20;
double exp10(int N)
{
double num=1.0;
if(N>0)
for(int i=0;i<N;i++)num *=10;
if(N<0)
for(int i=0;i>N;i--)num /= 10;
return;
};
double GetNum()
{
bool sng=false,dec=false,efalg=false,esng=false,eop=false;
char c;
double n=0,m=1.0;
int e = 0;
for(int i=0,j=0;i <MaxLen;i++)
switch(c=getche()){
case '0':case '1':case '2':case '3':case '4':
case '5':case '6':case '7':case '8':case '9':
if(eflag){e *=10;e+= c-'0';j++;break;}
if(!dec){n *=10; n+=c-'0';}
else{m*=10;n+= (c-'0')/m;}
break;
case '.':if(eflag)goto Done;if(dec)goto Done;else dec=true;break;
case 'e':case 'E':if(eflag)goto Done;eflag=true;break;
case '-':case '+':if(i && eflag){
if(j ||esng)goto Done;
esng=true;
if(c=='-')eop=true;}
else {
if(sng)goto Done;
if(c=='-') n = -n;
sng=true;break;}
default:goto Done;};
Done:
if(e){
if(eop)e = -e;
n = n*exp10(e);}
return n;
};
int c;
for(int c = 0; c != 10; ++c){
getche();
}