#include <stdio.h>
#include <stdint.h>
float custom_atof(const char *str) {
float ret_val = 0.0;
uint32_t decimal = 0, point = 0;
uint8_t sign_flg = 0;
while(*str == ' ' || *str == '\n'){
str++;
} //remove leading whitespaces if any
if(*str == '-'){
sign_flg = 1;
str++;
}
else if(*str == '+'){
str++;
}
while((*str != '\0') && (*str != '.')){
decimal *= 10;
decimal += (*str - '0');
str++;
}
if(*str == '.'){
ret_val = 1.0;
str++;
}
while(*str){
point *= 10;
point += (*str - '0');
ret_val /= 10;
str++;
}
// printf("\n%d %d %f\n", decimal, point, ret_val);
ret_val = decimal + (point * ret_val);
return (sign_flg) ? -ret_val : ret_val;
}
int main() {
char str[101];
fgets(str, sizeof(str), stdin);
// Remove newline
uint8_t i = 0;
while (str[i]) {
if (str[i] == '\n') {
str[i] = '\0';
break;
}
i++;
}
float value = custom_atof(str);
printf("%.2f", value);
return 0;
}
Input
123.45
Expected Output
123.45