输出水仙花数,自幂数(求一个数的位数)

2023-10-15 06:30
文章标签 输出 位数 水仙花 自幂

本文主要是介绍输出水仙花数,自幂数(求一个数的位数),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 1.自幂数
    • 1.1. 水仙花数
    • 1.2. 其他自幂数
  • 2. 编程实现
    • 2.1 输出水仙花数
      • 2.1.1 C
      • 2.1.2 Java
    • 2.2输出自幂数
      • 2.2.1 C
      • 2.2.2Java
      • 2.2.3 求取一个数的位数
    • 2.3判断是否是水仙花数/自幂数

1.自幂数

  • 了解水仙花数之前,我们先了解自幂数:

自幂数是指一个 n 位数,它的每个位上的数字的 n 次幂之和等于它本身。
例如:
当n为3时, 有1^3 + 5^3 + 3^3 =153 , 153即是n为3时的一个自幂数;
当n=1634时;有1^4 +6^4+ 3^4+ 4^4=1634,说明1634时n=4时的一个自幂数。

1.1. 水仙花数

     水仙花数只是自幂数的一种,严格来说3位数的3次幂数才称为水仙花数。(也就是说当n=3时的自幂数为水仙花数)。水仙花数(Narcissistic number)也被称为超完全数字不变数、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数,
水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。

1.2. 其他自幂数

附:其他位数的自幂数名字:
一位自幂数:独身数
两位自幂数:没有
三位自幂数:水仙花数     
四位自幂数:四叶玫瑰数
五位自幂数:五角星数
六位自幂数:六合数
七位自幂数:北斗七星数
八位自幂数:八仙数
九位自幂数:九九重阳数
十位自幂数:十全十美数常见自幂数:
三位的水仙花数共有4个:153,370,371,407;
四位的四叶玫瑰数共有3个:1634,8208,9474;
五位的五角星数共有3个:54748,92727,93084;
六位的六合数只有1个:548834;
七位的北斗七星数共有4个:1741725,4210818,9800817,9926315;
八位的八仙数共有3个:24678050,24678051,88593477
……

2. 编程实现

  1. 输出自幂数:

思路:

  • 求出数字的位数n;
  • 分解出每位上的数字;
  • 判断每个位置上的数的n次方是否等于此数。
  1. 输出水仙花数:
    思路:输出水仙花数与输出自幂数本质上是类似的;只不过少了求位数的这一步,位数直接为3。

2.1 输出水仙花数

2.1.1 C

#include<stdio.h>
#include<Windows.h>
#include<math.h>
void Search()
{for (int i = 100; i <1000; i++){int sum = 0;int tem = i;//保证i不变 用tem计算(方便最后sum与i的判断)while (tem){sum = sum + pow(tem % 10, 3);tem = tem / 10;}//求出每一位上的数的3次方之和sumif (sum == i)//判断sum是否等于数i,等于输出{printf("%d ", i);}}
}
int main()
{Search();system("pause");return 0;
}

运行结果:
在这里插入图片描述
注:

  • pow(a,b)是用来求a的b次方的,头文件math.h。

2.1.2 Java

public class TestDemo {public static void main(String[] args){//水仙花数是三位数for(int i=100;i<1000;i++){int huns=i/100;//百位int tens=i/10%10;//十位int ones=i%10;//个位if(i==Math.pow(huns,3)+Math.pow(tens,3)+Math.pow(ones,3)){System.out.println(i);}}}
}

运行结果:
在这里插入图片描述
注:

  • Math.pow(a,b)是java中求a的b次方的;

2.2输出自幂数

  • 注:这个具体要输出多大数,只要改变for循环次数就可【for (int i = ; i <***; i++)】。

2.2.1 C

#include<stdio.h>
#include<Windows.h>
#include<math.h>
int Count(int n)//求取位数
{if (n < 10){return 1;}return 1 + Count(n / 10);
}
void Search()
{for (int i =0 ; i <= 100000; i++){	int sum = 0;int tem = i;//保证i不变 用tem计算int digit = Count(tem);//位数	while (tem){sum = sum+ pow(tem % 10, digit);tem = tem / 10;}if (sum == i){printf("%d ",i);}}	
}
int main()
{Search();system("pause");return 0;
}

在这里插入图片描述

2.2.2Java

public class TestDemo {//求取位数public static int Digit(int x) {int digit=1;while(x>=10){digit++;x=x/10;}return digit;}public static void main(String[] args) {for(int i=0;i<1000;i++){int digit=Digit(i);int sum=0;int num=i;int c=digit;//位数即是次方数while(digit!=0){sum += Math.pow(num % 10, c);num/= 10;// t % 10得到每一位digit--;//循环count次}if(i==sum) {System.out.print(i + " ");}}}
}

在这里插入图片描述

2.2.3 求取一个数的位数

上述打印自幂数时用到了两种求位数的方法 (其实差不多):

  1. 老实巴交的求(循环)
   int digit=1;//首先我们认定输入的数最少一位while(x>=10)//当此数在一位以上时,循环{digit++;x=x/10;//每次循环减少一位(最后一位)}

举个栗子:
n=123 ,
digit=1; n=123>10;
digit=2; n=12>10;
digit=3; n=1<10(不满足条件出循环)

  1. 皮变馅不变,整了个递归
int Count(int n)//求取位数
{if (n < 10)//小于10的数一位{return 1;}return 1 + Count(n / 10);每次递归少一位(最后一位)
}

同样,举个栗子:
n=456,

  1. n=456>10; return 1+count (45)
  2. n=45>10 ; return 1+count(4)
  3. n=4<10;return 1
    返回2 , count(4)=1,return 1+1=2
    返回1 , count(45)=2,return1+3=3

2.3判断是否是水仙花数/自幂数

  • 改,照着上面改 缝缝补补差不多就是了。
  • 加一个从键盘输入;

c :

scanf("%d",&num);

java:

import java.util.Scanner;
Scanner sc = new Scanner(System.in);       
int num=sc.nextInt();
  • 然后改取位数的取位数;
  • 该判断的判断,输出是或不是。

这篇关于输出水仙花数,自幂数(求一个数的位数)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/215963

相关文章

顺序表之创建,判满,插入,输出

文章目录 🍊自我介绍🍊创建一个空的顺序表,为结构体在堆区分配空间🍊插入数据🍊输出数据🍊判断顺序表是否满了,满了返回值1,否则返回0🍊main函数 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~ 🍊自我介绍   Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾”

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出 在数字化时代,文本到语音(Text-to-Speech, TTS)技术已成为人机交互的关键桥梁,无论是为视障人士提供辅助阅读,还是为智能助手注入声音的灵魂,TTS 技术都扮演着至关重要的角色。从最初的拼接式方法到参数化技术,再到现今的深度学习解决方案,TTS 技术经历了一段长足的进步。这篇文章将带您穿越时

如何将一个文件里不包含某个字符的行输出到另一个文件?

第一种: grep -v 'string' filename > newfilenamegrep -v 'string' filename >> newfilename 第二种: sed -n '/string/!'p filename > newfilenamesed -n '/string/!'p filename >> newfilename

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录 在深度学习项目中,目标检测是一项重要的任务。本文将详细介绍如何使用Detectron2进行目标检测模型的复现训练,涵盖训练数据准备、训练命令、训练日志分析、训练指标以及训练输出目录的各个文件及其作用。特别地,我们将演示在训练过程中出现中断后,如何使用 resume 功能继续训练,并将我们复现的模型与Model Zoo中的

第六章习题11.输出以下图形

🌏个人博客:尹蓝锐的博客 希望文章能够给到初学的你一些启发~ 如果觉得文章对你有帮助的话,点赞 + 关注+ 收藏支持一下笔者吧~ 1、题目要求: 输出以下图形

LibSVM学习(五)——分界线的输出

对于学习SVM人来说,要判断SVM效果,以图形的方式输出的分解线是最直观的。LibSVM自带了一个可视化的程序svm-toy,用来输出类之间的分界线。他是先把样本文件载入,然后进行训练,通过对每个像素点的坐标进行判断,看属于哪一类,就附上那类的颜色,从而使类与类之间形成分割线。我们这一节不讨论svm-toy怎么使用,因为这个是“傻瓜”式的,没什么好讨论的。这一节我们主要探讨怎么结合训练结果文件

下载/保存/读取 文件,并转成流输出

最近对文件的操作又熟悉了下;现在记载下来:学习在于 坚持!!!不以细小而不为。 实现的是:文件的下载、文件的保存到SD卡、文件的读取输出String 类型、最后是文件转换成流输出;一整套够用了; 重点: 1:   操作网络要记得开线程; 2:更新网络获取的数据 切记用Handler机制; 3:注意代码的可读性(这里面只是保存到SD卡,在项目中切记要对SD卡的有无做判断,然后再获取路径!)

彻底解决win10系统Tomcat10控制台输出中文乱码

彻底解决Tomcat10控制台输出中文乱码 首先乱码问题的原因通俗的讲就是读的编码格式和写的解码格式不一致,比如最常见的两种中文编码UTF-8和GBK,UTF-8一个汉字占三个字节,GBK一个汉字占两个字节,所以当编码与解码格式不一致时,输出端当然无法识别这是啥,所以只能以乱码代替。 值得一提的是GBK不是国家标准编码,常用的国标有两,一个是GB2312,一个是GB18030 GB1

lesson1 输出出现重复行的文件名称

lesson1 输出出现重复行的文件名称 1. 代码 package mainimport ("bufio""fmt""io""os")/*** @Author: jiaona.chen* @Description:* @File: main* @Version: 1.0.0* @Date: 2024/09/07 15:25*/// 输出出现重复行的文件名称func main() {ty

Matplotlib图像读取和输出及jpg、png格式对比,及透明通道alpha设置

图像像素值 图像像素值一般size为3,也就是通道数,分别代表R,G,B,如果只有单一 一个值则表示灰度值,也就是说一张二维图片,当长和宽都为1080时,那么若是灰度图像,图像尺寸为(1080,1080,1)若是RGB图像则为(1080,1080,3), jpg、png图像格式 jpg图像的灰度值范围和RGB范围为[0,255],数值类型为uint8,也就是无符号整数 png图像的灰度值范