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;
}
}
}
运行如图

相关知识
C#自恋数字黑洞—水仙花数、玫瑰花数、五角星数
java 水仙花数(循环)
特殊的数独身数,:水仙花数, 四叶玫瑰数, 五角星数, 六合数 ,北斗七星数, 八仙数, 九九重阳数 ,十全十美数...
水仙花数的实现(python)
水仙花数解
打印出10000以内的所有的水仙花数——python
C语言判断水仙花数
计算水仙花数(广义)
vs水仙花数c语言代码,求水仙花数c语言代码怎么写
求100~999之间的水仙花数
原文链接: C#自恋数字黑洞—水仙花数、玫瑰花数、五角星数 https://www.huajiangbk.com/newsview1757242.html
| 上一篇: 自负自恋花开(自恋如花绽放) | 下一篇: 自负的花——傲慢之美(独特而自信... |
推荐分享

- 1明日花キララ:明日花绮罗年度... 16872
- 2明日花キララ(明日花绮罗)经... 9594
- 3兰花叶子扭的是什么兰 7914
- 4君子兰什么品种最名贵 十大名... 6376
- 5十大致癌花卉排行榜,哪些花卉... 6099
- 6李晓明工笔牡丹(魏紫)《牡丹... 6021
- 7家庭养花知识大全 家庭养花有... 4997
- 8花圈挽联怎么写? 4830
- 9家庭养花风水知识 家庭养花“... 4726
- 10世界上最名贵的10种兰花图片... 4714




