您的位置:首页 > 其它

题解:求满足条件n=a!+b!+c!的所有三位数n并输出

2012-03-01 08:04 1211 查看
【题目】求满足条件n=a!+b!+c!的所有三位数n并输出,要求用自定义函数实现求阶乘。

【本讲结构】

(一)题目讲解视频

(二)相关习题

(三)此类题目的共有特征及典型算法

(四)视频中的代码

(五)部分相关习题的参考例程

【正文部分】

(一)题目讲解视频





(二)相关习题(带*的在后面有参考例程)

若一个正整数n的所有小于n的因子之和等于n, 则称n为完全数, 如6=1+2+3是完全数。判断正整数n是否为完全数。
输出1000以内的所有完全数;
输入一个正整数,判断其是否为一个素数;
输出1000以内的所有素数;
输入一个正整数,判断其是否为一个回文数(例1221、12321都是回文数);
输出10000以内的所有回文数;
(*)输出输出10000以内的所有回文素数(提醒:某数是素数后再判断是否也是回文数。);

若一个素数的反序数仍为素数,则称它为可逆素数。求10000以内的所有可逆素数。

求1000000以内的正整数n,要求9n是n的反序数(例如,123是321的反序数)。

(三)此类题目的共有特征及典型算法

此类题目的共有特征是,需要考察一定范围内的数字符合某种特定的条件,从大的框架讲,就需要逐个考察相应范围内的每一个数字。因此,程的顶层结构是:

for(n=下限;n<=上限;n+=增量) //增量不一定固定为1
{
为构造条件进行相关的计算;
if(条件成立) 输出符合要求的结果
}
(四)视频中的代码

#include<iostream>
using namespace std;
int fact(int);
int main()
{
int abc,a,b,c,sum;
abc=100;
while(abc<1000)
{
//考察abc是否符合要求
c=abc%10;
b=(abc/10)%10;
a=abc/100;
sum=fact(a)+fact(b)+fact(c);
if(sum==abc)
cout<<abc<<"  ";
++abc;
}
return 0;
}

int fact(int n)
{
int i, f=1;
for(i=1;i<=n;++i)
f=f*i;
return f;
}


(五)部分相关习题的参考例程

(*)输出输出10000以内的所有回文素数(提醒:某数是素数后再判断是否也是回文数。);

#include "iostream.h"
#include "math.h"
void main()
{
int i,j,s,n;
cout<<2<<endl;
for(i=3;i<10000;i+=2)
{
n=int(sqrt(i));
for(j=3;j<=n;j+=2)    // 判断i是否为素数
if (i%j==0) break;
if (j<=n) continue;   // i不是素数
n=i;
s=0;
while(n)              // 求n的反序数s
{
s=10*s+n%10;     // 将上次累加和的10倍与新分离出的位相加
n/=10;           // 将n缩小10倍
}
if (s==i) cout<<i<<endl;  // i与其反序数相等,i是回文数
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐