intatoint(constchar*nptr){int c;/* current char */int total;/* current total */int sign;/* if '-', then negative, otherwise positive *//* skip whitespace */while(isspace((int)(unsignedchar)*nptr))++nptr;
c =(int)(unsignedchar)*nptr++;
sign = c;/* save sign indication */if(c =='-'|| c =='+')
c =(int)(unsignedchar)*nptr++;/* skip sign */
total =0;while(isdigit(c)){
total =10* total +(c -'0');/* accumulate digit */
c =(int)(unsignedchar)*nptr++;/* get next char */}if(sign =='-')return-total;elsereturn total;/* return result, negated if necessary */}
atodouble 字符串转double
doubleatodouble(constchar*s){char**endptr =0;registerconstchar*p = s;registerlongdouble value =0.L;int sign =0;longdouble factor;unsignedint expo;while(isspace(*p))
p++;if(*p =='-'||*p =='+')
sign =*p++;while((unsignedint)(*p -'0')<10u)
value = value *10+(*p++-'0');if(*p =='.'){
factor =1.;
p++;while((unsignedint)(*p -'0')<10u){
factor *=0.1;
value +=(*p++-'0')* factor;}}if((*p |32)=='e'){
expo =0;
factor =10.L;switch(*++p){case'-':
factor =0.1;case'+':
p++;break;case'0':case'1':case'2':case'3':case'4':case'5':case'6':case'7':case'8':case'9':break;default:
value =0.L;
p = s;goto done;}while((unsignedint)(*p -'0')<10u)
expo =10* expo +(*p++-'0');while(1){if(expo &1)
value *= factor;if((expo >>=1)==0)break;
factor *= factor;}}
done:if(endptr !=0)*endptr =(char*)p;return(sign =='-'?-value : value);}
int64_tatoint64(constchar*p){int64_t n;int c, neg =0;unsignedchar*up =(unsignedchar*)p;if(!isdigit(c =*up)){while(isspace(c))
c =*++up;switch(c){case'-':
neg++;/* FALLTHROUGH */case'+':
c =*++up;}if(!isdigit(c))return(0);}for(n ='0'- c;isdigit(c =*++up);){
n *=10;/* two steps to avoid unnecessary overflow */
n +='0'- c;/* accum neg to avoid surprises at MAX */}return(neg ? n :-n);}