永发信息网

C#编程水仙花数

答案:1  悬赏:60  手机版
解决时间 2021-04-02 05:54
  • 提问者网友:凉末
  • 2021-04-01 07:36
C#编程水仙花数
最佳答案
  • 五星知识达人网友:一把行者刀
  • 2021-04-01 09:09
闲来无事做了个。可以查找任意位数的水仙花数。

虽然使用了缓存存储自然数的幂,但运算到7位以上依旧非常慢。
public static int[] 整数转数组(int i) {
            string s = i.ToString();
            var re = new int[s.Length];
            for (int k = 0; k < s.Length; k++) {
                re[k] = int.Parse(s.Substring(k,1));
            }
            return re;
        }

        static void Main(string[] args) {
            int n1 = 3; //开始位数
            int n2 = 5; //结束位数
            SortedList> 结果 = new SortedList>();

            //遍历开始位数 ~ 结束位数
            for (int n = n1; n <= n2; n++) {
                //创建n位数的结果列表
                var 列表 = new List();
                结果.Add(n, 列表);
                Console.WriteLine(n + "位数:");
                //创建n位数幂的缓存1 ~ 9数字的n次方整数
                int[] nx = new int[10];
                for (int k = 0; k <= 9; k++) {
                    nx[k] = (int)Math.Pow(k, n);
                }
                //遍历100 ~ 999,更多位数类推
                int start = (int)Math.Pow(10, n - 1); // 百位数开始值 100 
                for (int i = start; i < start * 10; i++) {
                    //分解i为数组
                    var arr = 整数转数组(i);
                    //求各位数的幂的和
                    int sum = 0;
                    for (int j = 0; j < arr.Length; j++) {
                        sum += nx[arr[j]];
                    }                  
                    //判断
                    if (sum == i) { 列表.Add(i); Console.WriteLine(i); }
                }
            }

            Console.WriteLine("{0} ~ {1} 位数的水仙花数查找完毕。", n1, n2);
            Console.ReadKey();     
        }如满意,请采纳,谢谢。

追问能给一下流程图吗
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯