-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathatoif_func.cpp
45 lines (43 loc) · 965 Bytes
/
atoif_func.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include<iostream>
#include<iomanip>
using namespace std;
template<unsigned long long n>
long double atoif(const char (&num)[n],bool space_flag=false){//i.e. converts string to float
if (n==-1||!n)
return 0;
short sign=1,i=0; int integer_part=0; bool fraction_flag=false;
if (num[i]=='-'){// Take care of +/- sign
++i;
sign=-1;
}
else if(num[i]=='+')
++i;
while(i<n-1){
if(space_flag&&num[i]==' ')
break;
if (num[i]>='0'&&num[i]<='9')
integer_part=integer_part*10+(num[i]-'0');
else if(num[i]=='.'){
fraction_flag=true;
i++;
break;
}
++i;
}
long double fraction_part=0;
if (fraction_flag){
long double exponent=0.1;
while (i<n-1){
if (num[i]<'0'||num[i]>'9')
break;
fraction_part+=exponent*(num[i]-'0');
exponent*=0.1;
++i;
}
}
return sign*integer_part+fraction_part;
}
int main(){
cout<<setprecision(12)<<atoif("51224.765432");
return 0;
}