300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > C#自恋数字黑洞—水仙花数 玫瑰花数 五角星数

C#自恋数字黑洞—水仙花数 玫瑰花数 五角星数

时间:2022-04-04 08:43:45

相关推荐

C#自恋数字黑洞—水仙花数 玫瑰花数 五角星数

自恋数

当一个n位数的所有数位上数字的n次方和等于这个数本身,这个数就叫自恋数。

显然1,2,3,...,9是自恋数。【比如6的一次方仍然是6】,自恋性数字也是数字黑洞的一种。

水仙花数

三位数中的自恋数,三位数的所有数位上数字的三次方之和等于这个数本身

三位数中的自恋数有四个:153,370,371和407(这四个数被称为“水仙花数”)。

比如371=3的三次方+7的三次方+1的三次方

玫瑰花数

四位数中的自恋数,四位数的所有数位上数字的四次方之和等于这个数本身

四位的“玫瑰花数”有:1634,8208;9474;

五角星数

五位数中的自恋数,五位数的所有数位上数字的五次方之和等于这个数本身

五位的“五角星数”有:54748,92727,93084。

当数字个数大于五位时,这类数字就统称为“自幂数”。

我们使用C#程序获取10万【1~99999】以下的所有自恋数。

使用5个现场进行处理:分一位数、二位数、三位数、四位数、五位数。

控制台NarcissisticNumberDemo源程序如下:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace NarcissisticNumberDemo{class Program{static void Main(string[] args){Console.SetWindowSize(110, 30);//当一个n位数的所有数位上数字的n次方和等于这个数本身,这个数就叫自恋数。//水仙花数:三位数中的自恋数,三位数的所有数位上数字的三次方之和等于这个数本身Task taskOne = Task.Factory.StartNew(() => {GetScopeNarcissisticNumber(1, 10, "一");});Task taskTwo = Task.Factory.StartNew(() =>{GetScopeNarcissisticNumber(10, 100, "二");});Task taskThree = Task.Run(() =>{GetScopeNarcissisticNumber(100, 1000, "三");});Task taskFour = Task.Run(() =>{GetScopeNarcissisticNumber(1000, 10000, "四");});Task taskFive = Task.Run(() =>{GetScopeNarcissisticNumber(10000, 100000, "五");});Console.ReadLine();}/// <summary>/// 获取范围内的所有自恋数/// </summary>/// <param name="from">起始数,包含此数</param>/// <param name="to">到倒数,不包含此数</param>/// <param name="digitInfo">位数</param>static void GetScopeNarcissisticNumber(int from, int to, string digitInfo){Console.WriteLine($"[{DateTime.Now.ToString("HH:mm:ss.fff")}]->获取【{digitInfo}】位数的所有自恋数:");int count = 0;for (int number = from; number < to; number++){if (IsNarcissisticNumber(number)){count++;}}Console.WriteLine($"[{DateTime.Now.ToString("HH:mm:ss.fff")}]->【{digitInfo}】位数的所有自恋数共有【{count}】个");}/// <summary>/// 是否是自恋数/// 一个n位数的所有数位上数字的n次方和等于这个数本身,这个数就叫自恋数。/// </summary>/// <param name="number"></param>/// <returns></returns>static bool IsNarcissisticNumber(int number){if (number < 1 || number > 99999){Console.WriteLine($"无效的数字【{number}】,请输入范围在1~99999之间的数");return false;}int originNumber = number;//原始数字Stack<int> stack = new Stack<int>();while (number != 0){stack.Push(number % 10);number = number / 10;}//位数int digit = stack.Count;int sum = 0;//求和while (stack.Count > 0){sum += (int)Math.Pow(stack.Pop(), digit);}if (sum == originNumber){string description = string.Empty;switch (digit){case 3:description = "【水仙花数】";break;case 4:description = "【玫瑰花数】";break;case 5:description = "【五角星数】";break;}Console.WriteLine($"[{DateTime.Now.ToString("HH:mm:ss.fff")}]->【{digit}】位数【{originNumber}】是自恋数。{description}");return true;}return false;}}}

运行如图

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。