首页 > 其他分享 >7-2 水仙花数

7-2 水仙花数

时间:2023-11-02 13:36:59浏览次数:30  
标签:测试点 int max 位数 pow 水仙花

目录

目录

题目

水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如153=1^3+5^3+3^3
本题要求编写程序,计算所有N位水仙花数。

输入格式:
输入在一行中给出一个正整数N(3≤N≤7)。

输出格式:
按递增顺序输出所有N位水仙花数,每个数字占一行。

输入样例:
3
输出样例:

153
370
371
407

思路

伪代码

1.输入正整数位数n;
2.设i为最小n位数,max为最大n位数;
3.循环:i->max
  3.1.令x=i,计算x每个位上数的n次幂之和s;
  3.2.如果s==i,则i为完数

代码

第一次未通过所有测试点

#include<stdio.h>
#include<math.h>
int main()
{
    int n, i, max, s = 0;
    scanf_s("%d", &n);
    i = pow(10, n - 1);
    max = pow(10, n) - 1;
    for (; i <= max; i++)
    {
        s = 0;
        int x = i;
        while (x)
        {
            s += pow(x % 10, n);
            x /= 10;
        }
        if (s == i)
            printf("%d\n", i);
    }
    return 0;
}
评测详情

分析原因

n太大时,n位数数量太多,循环太多次,运行超时。
因此要想办法减少循环或调用函数来减少运行时间。

第二次通过所有测试点

调用函数会比函数库快

#include<stdio.h>
int pow(int a, int n)
{
    int s = 1;
    for (; n > 0; n--)
    {
        s = s * a;
    }
    return s;
}
int main()
{
    int n, i, max, s = 0;
    scanf_s("%d", &n);
    i = pow(10, n - 1);
    max = pow(10, n) - 1;
    for (; i <= max; i++)
    {
        s = 0;
        int x = i;
        while (x)
        {
            s += pow(x % 10, n);
            x /= 10;
        }
        if (s == i)
            printf("%d\n", i);
    }
    return 0;
}
测试详情


题后小知识

水仙花数只是自幂数的一种,严格来说3位数的3次幂数才称为水仙花数。

其他位数的自幂数名字
自冥数 名称 常见自冥数
一位 独身数 -
三位 水仙花数 153,370,371,407
四位 四叶玫瑰数 1634,8208,9474
五位 五角星数 54748,92727,93084
六位 六合数 548834
七位 北斗七星数 1741725,4210818,9800817,9926315
八位 八仙数 24678050,24678051,88593477
九位 九九重阳数 146511208,472335975,534494836,912985153
十位 十全十美数 4679307774

标签:测试点,int,max,位数,pow,水仙花
From: https://www.cnblogs.com/wa2211lq/p/17802898.html

相关文章

  • 送你一朵【水仙花数】
    文章目录前言一、题目二、思路分析:二、代码分析总结前言水仙花性喜温暖、湿润、排水良好的环境。在中国已有一千多年栽培历史,为传统观赏花卉。水仙花数(Narcissisticnumber)也被称为超完全数字不变数(pluperfectdigitalinvariant,PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗......
  • C语言-水仙花数
    计算100-1000内的水仙花#include<stdio.h>//水仙花数boolshuixianhua(intnum); intmain(){ inti; for(i=100;i<1000;i++){ if(shuixianhua(i)==1){ printf("%disashuixianhuanum.\n",i); } } return0; }boolshuixianhua(in......
  • 输出100-999之间所有的水仙花数。水仙花数指的是:各位数字立方和等于该数本身例如:153=1
    #include<stdio.h>intmain(){ inti,b0,b1,b2; intcount=0; for(i=100;i<1000;i++) { b0=i/100; b1=(i-b0*100)/10; b2=i%10; if(i==((b0*b0*b0)+(b1*b1*b1)+(b2*b2*b2))) {  count++;  printf("%d\n",i); } } printf("水仙花个数是:%d",co......
  • 用python求100到999以内的水仙花数(不用除法求各项)
    c=0forainrange(100,1000):forbinstr(a):a1=int(b)c=c+a1**3ifa==c:print(a)c=0输出结果为153370371407使用for循环来取数字中的每一位,不过数字要先化为str格式来取然后再化为int格式来赋值,要注意c的值每一次......
  • C语言求1000以内所有的水仙花数
    求1000以内所有的水仙花数何为水仙花数一个3位整数的各位数字的立方之和等于这个整数,称之为“水仙花数”。例如:153是水仙花数,因为153=1*1*1+5*5*5+3*3*3。先看代码#include<stdio.h>#include<math.h>intmain(){inti,a,b,c,d;for(i=100;i<1000;i++)......
  • 水仙花数
    水仙花数一个三位数,各位数分别是abc,则满足如下条件的数称为水仙花数:\[abc=a^3+b^3+c^3\]比如:\[153=1^3+5^3+3^3\]水仙花总数为153,370,371,407。精确地说,3位数的三次幂数就叫做水仙数。数较多的还有其他相应称呼,如:四个数字的四叶玫瑰数目共有3:1634,8208,9474......
  • 水仙花数
     进行水仙花数讲解水仙花数也被称为超完全数字不变数、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数,水仙花数是指一个3位数,它的每个位上的数字的3次幂之和等于它本身例如1^3+5^3+3^3=153;直接取值判断for循环i从100逐渐加一到1000 a取i的个位数b取i的十位数c取i的......
  • Python 实现水仙花数
    水仙花数水仙花数(Narcissisticnumber)也被称为超完全数字不变数(pluperfectdigitalinvariant,PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrongnumber),水仙花数是指一个3位数,它的每个位上的数字的3次幂之和等于它本身。例如:1^3+5^3+3^3=153。根据定义可知:水......
  • 水仙花数
    intSum(inttmp,intn){ intj=1; intsum=0; while(tmp) { intret=1; inttmp2=0; for(j=1;j<=n;j++) { tmp2=ret*tmp%10; } sum+=tmp2; tmp/=10; } returnsum;}intmain(){ inti=0; for(i=0;i<=100000;i++) { //判......
  • 水仙花数
    一、问题描述水仙花数是指一个3位数,它的每个位上的数字的3次幂之和等于它本身,例如:13+53+3^3=153。输出所有的水仙花数。二、设计思路“水仙花数”是指满足某一条件的三位数,根据这一信息可以确定整数的取值范围是100~999。对应的循环条件如下:for(n=100;n<1000;n++){……}......