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

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();
  • 然后改取位数的取位数;
  • 该判断的判断,输出是或不是。

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


原文地址:https://blog.csdn.net/Aug_IK/article/details/109527887
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/215963

相关文章

java字符串数字补齐位数详解

《java字符串数字补齐位数详解》:本文主要介绍java字符串数字补齐位数,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java字符串数字补齐位数一、使用String.format()方法二、Apache Commons Lang库方法三、Java 11+的St

python多种数据类型输出为Excel文件

《python多种数据类型输出为Excel文件》本文主要介绍了将Python中的列表、元组、字典和集合等数据类型输出到Excel文件中,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一.列表List二.字典dict三.集合set四.元组tuplepython中的列表、元组、字典

Spring AI集成DeepSeek实现流式输出的操作方法

《SpringAI集成DeepSeek实现流式输出的操作方法》本文介绍了如何在SpringBoot中使用Sse(Server-SentEvents)技术实现流式输出,后端使用SpringMVC中的S... 目录一、后端代码二、前端代码三、运行项目小天有话说题外话参考资料前面一篇文章我们实现了《Spring

Rust格式化输出方式总结

《Rust格式化输出方式总结》Rust提供了强大的格式化输出功能,通过std::fmt模块和相关的宏来实现,主要的输出宏包括println!和format!,它们支持多种格式化占位符,如{}、{:?}... 目录Rust格式化输出方式基本的格式化输出格式化占位符Format 特性总结Rust格式化输出方式

使用TomCat,service输出台出现乱码的解决

《使用TomCat,service输出台出现乱码的解决》本文介绍了解决Tomcat服务输出台中文乱码问题的两种方法,第一种方法是修改`logging.properties`文件中的`prefix`和`... 目录使用TomCat,service输出台出现乱码问题1解决方案问题2解决方案总结使用TomCat,

C++中实现调试日志输出

《C++中实现调试日志输出》在C++编程中,调试日志对于定位问题和优化代码至关重要,本文将介绍几种常用的调试日志输出方法,并教你如何在日志中添加时间戳,希望对大家有所帮助... 目录1. 使用 #ifdef _DEBUG 宏2. 加入时间戳:精确到毫秒3.Windows 和 MFC 中的调试日志方法MFC

Python使用Colorama库美化终端输出的操作示例

《Python使用Colorama库美化终端输出的操作示例》在开发命令行工具或调试程序时,我们可能会希望通过颜色来区分重要信息,比如警告、错误、提示等,而Colorama是一个简单易用的Python库... 目录python Colorama 库详解:终端输出美化的神器1. Colorama 是什么?2.

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

文章目录 🍊自我介绍🍊创建一个空的顺序表,为结构体在堆区分配空间🍊插入数据🍊输出数据🍊判断顺序表是否满了,满了返回值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