【C#】自幂数
什么是自幂数
在一个固定的进制中,一个n位自然数等于自身各个数位上数字的n次幂之和,则称此数为自幂数。
任意位数的每个数的次方相加等于他们自身;
如
三位自幂数 水仙花数
153=13+ 53+33=1+125+27
四位自幂数 四叶玫瑰数
1634=14+ 64+34+44=1+1296+81+256
五位自幂数 五角星数
54748=55+ 45+75+45+85=3125+1024+16807+1024+32768
…
同理到,六合数、北斗七星数、八仙数、九九重阳数、十全十美数…
一位自幂数是他们本身,没有二位自幂数
问题分析
怎么获得数字指定位置上的数值呢?
54748 个位 54748 % 10
54748 十位 5474 % 10
54748 百位 547 % 10
54748 千位 54 % 10
54748 万位 5 % 10
一直将每一个位上的数字移动到个位
代码实现
仅供参考(答案不止一种):
Console.WriteLine("输入数字,查询n位自幂数,");
// 获取用户输入的内容
int Number = Convert.ToInt32(Console.ReadLine());
// switch 缩小自幂数的范围
switch (Number)
{
case 1:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
// 根据用户输入的数字来设置上限与下限
int Star = (int)Math.Pow(10, Number - 1);
int end = (int)Math.Pow(10, Number);
for (int i = Star; i < end; i++)
{
// 定义临时变量j
int j = i;
// 定义变量 和 来验证是不是自幂数
int sum = 0;
while (j!=0)
{
// 验证是不是自幂数
sum += (int)Math.Pow((j % 10), Number);
// 将每一个位上的数字移动到个位
j = j / 10;
}
if (i == sum)
{
Console.WriteLine(sum);
}
}
break;
case 2:
Console.WriteLine("没有二位自幂数.");
break;
default:
Console.WriteLine("您输入的位数太大,我不想计算.");
break;
}
十进制中最大的自幂数有39位,共有88个自幂数.
所以代码中运用了switch,不计算过大的数.
知识小点
循环
顺序语句
从上至下,顺序执行,根据条件是否成立,选择不同的代码执行,一段代码会重复执行多次
循环四要素
- 循环变量初始值
- 循环条件
- 循环体代码
- 让循环变量趋近于结束条件的代码
执行过程
1 -> 2 -> 3 -> 4 -> 2-> 3 -> 4 -> 2 -> 3 -> 4 ->…2
(不满足条件,退出循环)