求高手解答!!

ZHUANGZIHAO 2012-11-16 11:24:56
老师出了这么个题n=a!+b!+c! n为三位数,a,b,c,分别为百位十位个位,要求用自定义函数求阶乘

我是个菜鸟,希望有老手帮我解决一下这个代码为什么不行!
#include <iostream>
using namespace std;
long fac(int n);
int main()
{
int n,a,b,c;
for(n=100;n<1000;++n)
{
a=n/100; //三位数的百位
b=n%10/10;//三位数的十位
c=n%10;//三位数的个位
if (n==fac(a)+fac(b)+fac(c))
cout<<n<<"\n";
}return 0;

}
long fac(int m)//定义阶乘
{
int i;
long sum=1;
if(m==0||m==1){
return 1;
}else{
for(i=2;i<=m;i++)
sum=i*sum;//累乘
}return sum;
}


...全文
92 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
tmwanly 2012-11-16
  • 打赏
  • 举报
回复
引用 4 楼 nice_cxf 的回复:
引用 3 楼 anhuizhuanjiao 的回复:两个错误 1、b=n%10/10;这样是不对的。 2、long fac(int n)函数应该要递归调用 2个错误在程序中都给你改了 为啥非要递归啊?别人写的好好的非递归算法,你改成递归有好处么?
用递归少些了代码,而且能很好的运用递归对C++的学习是很有好处的,能为以后遇到的难题省去很多麻烦, 值得学习。
转角天边 2012-11-16
  • 打赏
  • 举报
回复
引用 4 楼 nice_cxf 的回复:
引用 3 楼 anhuizhuanjiao 的回复: 两个错误 1、b=n%10/10;这样是不对的。 2、long fac(int n)函数应该要递归调用 2个错误在程序中都给你改了 为啥非要递归啊?别人写的好好的非递归算法,你改成递归有好处么?
好吗,可以攻玉累乘
nice_cxf 2012-11-16
  • 打赏
  • 举报
回复
引用 3 楼 anhuizhuanjiao 的回复:
两个错误 1、b=n%10/10;这样是不对的。 2、long fac(int n)函数应该要递归调用 2个错误在程序中都给你改了
为啥非要递归啊?别人写的好好的非递归算法,你改成递归有好处么?
转角天边 2012-11-16
  • 打赏
  • 举报
回复
两个错误 1、b=n%10/10;这样是不对的。 2、long fac(int n)函数应该要递归调用 2个错误在程序中都给你改了
nice_cxf 2012-11-16
  • 打赏
  • 举报
回复
b算错了,应该先/后%这种问题自己单步以下就可以了
转角天边 2012-11-16
  • 打赏
  • 举报
回复
修改如下

#include <iostream>
using namespace std;
long fac(int n);
int main()
{
	int n,a,b,c;
	for(n=100;n<1000;++n)
	{
		a=n/100; //三位数的百位
		b=(n-a*100)/10;//三位数的十位
		c=n%10;//三位数的个位
		if (n==fac(a)+fac(b)+fac(c))
			cout<<n<<"\n";
	}
	return 0;	
}
long fac(int m)//定义阶乘
{
	long sum=1;
    if(m==0||m==1)
	{
		return 1;
	}
	else
	{
		sum=m*fac(m-1);
	}
	return sum;
}
Ahh_Freshmeat 2012-11-16
  • 打赏
  • 举报
回复
是不是递归的效率要高一些呢 145=1!+4!+5!
#include <iostream>
using namespace std;
long fac(int n);
int main()
{
	int n,a,b,c;
	for(n=100;n<1000;++n)
	{
		a=n/100; //三位数的百位
	//	b=n%10/10;//三位数的十位
		b=n/10%10;
		c=n%10;//三位数的个位
		if (n==fac(a)+fac(b)+fac(c))
			cout<<n<<"\n";
	}return 0;
	
}
long fac(int m)//定义阶乘
{
	int i;
	long sum=1;
    if(m==0||m==1){
		return 1;
	}else{
		for(i=2;i<=m;i++)
			sum=i*sum;//累乘
	}return sum;
}

64,649

社区成员

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

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