关于将字符型的数字转换成整型的有关问题

关于将字符型的数字转换成整型的问题
我知道貌似有个函数叫atof可以转换。。但是我就是想知道我自己写的这个为什么不对
请指教 代码与运行结果如下

#include <iostream>
#include <math.h>
using namespace std;

int main()
{
int n[10],j,k,i=0,m=0;
char c=getchar();
while(c!='0')
{n[i]=int(c)-48;i++;c=getchar();}
for(j=0;j<i;j++)
{
k=n[j]*pow(10,i-j-1);
m=m+k;
k=0;
}
cout<<m<<endl;
}


关于将字符型的数字转换成整型的有关问题
------解决思路----------------------
int main () {
int ret = 0 ;
while (true) {
char c = cin.get () ;
if (c < '0' 
------解决思路----------------------
 c > '9')
break ;
ret = ret * 10 + (c - '0') ;
}
cout << ret << endl ;
return 0 ;
}

------解决思路----------------------
可能想到的原因:

pow(10,i-j-1) 返回的是一个浮点数,有可能不精确。

========

比如,当你期望它想返回 1 的时候,它可能返回一个 0.99999999998 
------解决思路----------------------
引用:
可能想到的原因:

pow(10,i-j-1) 返回的是一个浮点数,有可能不精确。

========

比如,当你期望它想返回 1 的时候,它可能返回一个 0.99999999998 


问题楼上也说了,解决办法自己实现pow


#include <iostream>
#include <math.h>
using namespace std;

int main()
{
int n[10],j,k,i=0,m=0;
char c=getchar();
while(c!='0')
{n[i]=int(c)-48;i++;c=getchar();}   
for(j=0;j<i;j++)
{
int tmp = 10;
int ii;
for(ii = 0; ii < i-j-1; ii++)
tmp *= 10;
k=n[j]*tmp;
m=m+k;
k=0;
}
cout<<m<<endl;

return 0;
}