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

caterpillarous 2015-11-08 12:35:37
我知道貌似有个函数叫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;
}


...全文
288 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 版主 2015-11-08
  • 打赏
  • 举报
回复
引用 4 楼 fefe82 的回复:
可能想到的原因: 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;
}
fefe82 2015-11-08
  • 打赏
  • 举报
回复
可能想到的原因: pow(10,i-j-1) 返回的是一个浮点数,有可能不精确。 ======== 比如,当你期望它想返回 1 的时候,它可能返回一个 0.99999999998
caterpillarous 2015-11-08
  • 打赏
  • 举报
回复
引用 1 楼 ID870177103 的回复:
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 ;
}
请问我写的问题出在哪里 为什么输出的数字会比我输入的数字小1呢
caterpillarous 2015-11-08
  • 打赏
  • 举报
回复
引用 楼主 caterpillarous 的回复:
我知道貌似有个函数叫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;
}
请问我写的问题出在哪里 为什么输出的数字会比我输入的数字小1呢
ID870177103 2015-11-08
  • 打赏
  • 举报
回复
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 ;
}

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧