MT1201,1202 强数 克里希那穆提数 语言基础循环结构 做题笔记

文章介绍了如何编程判断一个数是否为强数,即其各位数字的阶乘和等于原始数。首先探讨了两种实现阶乘的方法:循环和递归,然后讲解了如何剥离数字的各位。最终提供了完整代码示例,包括在给定范围内查找所有强数的实现。
摘要由CSDN通过智能技术生成

码题集新手村强数

强数是各位数字的阶乘和等于原始数的数,输入一个数字N,检查它是否为强数。
是则输出YES,否则输出NO。
比如145,1!+4!+5!=145

考察两个点

怎么实现阶乘

我们想到两种方式

循环实现

#include <stdio.h>

int main()
{
    int n = 1,i,t;
    scanf("%d", &t);
    for (i = 1; i <= t; i++)
    {
        n = n * i;
    }
    printf("%d", n);
}
​

也可以通过递归实现

#include <stdio.h>
int jc(int n)
{
    if (n<=1)
    {
        return 1;
    }
    return n * jc(n - 1);
}
int main()
{
    int t,i;
    scanf("%d", &t);
    printf("%d", jc(t));
}

第二个问题是怎么把数字的各个位数剥离出来

任意给出一个三位数为例子

我们要得到它的个位

只要将它除以十得到的余数就是个位

接下来我们再将这个数字除以十

以同样的除以十的余数来得到三位数的十位数

循环该操作就可以得到各个位置上的数值

得到这些准备知识

我们来完成最后的代码的编写

#include<stdio.h>
int jiecheng(int n)
{
    if(n<=1)
      return 1;
    return n*jiecheng(n-1);
}
int main() 
{ 
    int i,j=0;
    scanf("%d",&i);
    int count=i;
    while(i!=0)
    {
        j+=jiecheng(i%10);
        i/=10;
    }
    if(count==j)
    {
        printf("YES");
    }
    else
    {
        printf("NO");
    }
    

    return 0; 
}

此题结束

我们现在在一个区间内来寻找我们的强数

代码如下

#include<stdio.h>
int jc(int n)
{
    if(n<=1)
      return 1;
    return n*jc(n-1);
}
int main() 
{ 
    int i,j=0,n,count;
    scanf("%d%d",&i,&n);
    for(i;i<=n;i++)
    {
        count=i;
        while(count!=0)
        {
            j+=jc(count%10);
            count/=10;
        }
        if(i==j)
        {
            printf("%d ",i);
        }
        count=i;
        j=0;
    }

    return 0; 
}

这里最重要的地方就是我们要记得把循环内使用过的量重新赋值

否则会影响下一次循环的进程

导致自己不知道程序哪里出现了错误

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值