显然1,2,3,...,9是自恋数。【比如6的一次方仍然是6】,自恋性数字也是数字黑洞的一种。
三位数中的自恋数,三位数的所有数位上数字的三次方之和等于这个数本身
三位数中的自恋数有四个:153,370,371和407(这四个数被称为“水仙花数”)。
比如371=3的三次方+7的三次方+1的三次方
四位数中的自恋数,四位数的所有数位上数字的四次方之和等于这个数本身
四位的“玫瑰花数”有:1634,8208;9474;
五位数中的自恋数,五位数的所有数位上数字的五次方之和等于这个数本身
五位的“五角星数”有:54748,92727,93084。
当数字个数大于五位时,这类数字就统称为“自幂数”。
使用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://m.huajiangbk.com/newsview1757242.html
上一篇: 自负自恋花开(自恋如花绽放) |
下一篇: 自负的花——傲慢之美(独特而自信 |