#include <stdio.h>
int str2int(char *s)
{
char *p;
int r = 0;
for(p = s; *p; ++p)
if(0x30 <= *p && *p <= 0x39) r = r * 10 + *p - 0x30;
return r;
}
double str2double(char *s)
{
char *p;
double r = 0.0, f = 1.0;
for(p = s; *p; ++p)
if(0x30 <= *p && *p <= 0x39){
r = r * (f >= 1.0 ? 10 : 1) + (*p - 0x30) * (f >= 1.0 ? 1 : f);
if(f < 1.0) f *= 0.1;
}else f *= 0.1;
return r;
}
int main(int ac, char **av)
{
fprintf(stdout
, "%d\n", str2int
("9240")); fprintf(stdout
, "%f\n", str2double
("0.0543")); fprintf(stdout
, "%f\n", str2double
("9240.0543")); fprintf(stdout
, "%d\n", str2int
("9240.0")); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgppbnQgc3RyMmludChjaGFyICpzKQp7CiAgY2hhciAqcDsKICBpbnQgciA9IDA7CiAgZm9yKHAgPSBzOyAqcDsgKytwKQogICAgaWYoMHgzMCA8PSAqcCAmJiAqcCA8PSAweDM5KSByID0gciAqIDEwICsgKnAgLSAweDMwOwogIHJldHVybiByOwp9Cgpkb3VibGUgc3RyMmRvdWJsZShjaGFyICpzKQp7CiAgY2hhciAqcDsKICBkb3VibGUgciA9IDAuMCwgZiA9IDEuMDsKICBmb3IocCA9IHM7ICpwOyArK3ApCiAgICBpZigweDMwIDw9ICpwICYmICpwIDw9IDB4MzkpewogICAgICByID0gciAqIChmID49IDEuMCA/IDEwIDogMSkgKyAoKnAgLSAweDMwKSAqIChmID49IDEuMCA/IDEgOiBmKTsKICAgICAgaWYoZiA8IDEuMCkgZiAqPSAwLjE7CiAgICB9ZWxzZSBmICo9IDAuMTsKICByZXR1cm4gcjsKfQoKaW50IG1haW4oaW50IGFjLCBjaGFyICoqYXYpCnsKICBmcHJpbnRmKHN0ZG91dCwgIiVkXG4iLCBzdHIyaW50KCI5MjQwIikpOwogIGZwcmludGYoc3Rkb3V0LCAiJWZcbiIsIHN0cjJkb3VibGUoIjAuMDU0MyIpKTsKICBmcHJpbnRmKHN0ZG91dCwgIiVmXG4iLCBzdHIyZG91YmxlKCI5MjQwLjA1NDMiKSk7CiAgZnByaW50ZihzdGRvdXQsICIlZFxuIiwgc3RyMmludCgiOTI0MC4wIikpOwogIHJldHVybiAwOwp9