C# 中的阿姆斯特朗数

问题描述 投票:0回答:6

我用 C# 编写了这个程序来生成阿姆斯特朗数。我知道添加额外的方法是不必要的,但这是我刚刚学到并一直在练习的东西。因此,无论我给出的限制有多大,生成器都只显示 9 之前的数字。

using System;

namespace ArmstrongNumberGenerator
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Enter the maximum limit for searching");
            int max = Convert.ToInt32(Console.ReadLine());
            for (int i = 1; i <= max; i++)
            {
                if (isArmstrong(i))
                    Console.WriteLine(i);
            }
            Console.ReadLine();
        }

        static bool isArmstrong(int x)
        {
            int temp = x;
            int sum = 0;
            while (x!=0)
            { sum = sum + x % 10;
                x = x / 10;
            }

            if (sum == temp)
                return true;
            else
                return false;
        }
    }
}

我看不出我做错了什么。

c# math
6个回答
3
投票

阿姆斯特朗数解释:

其数字的立方和必须等于数字本身。

例如,

407
作为输入给出。
4 * 4 * 4 + 0 * 0 * 0 + 7 * 7 * 7 = 407
是阿姆斯特朗数。

你需要计算正确的总和:

static bool isArmstrong(int x)
{
    int sum = 0;
    for (int i = x; i > 0; i = i / 10)
    {
        sum = sum + (int)Math.Pow(i % 10, 3.0);
    }

    if (x == sum)
        return true;
    else
        return false;
}

您的代码具有以下输出(除了我包括

0
,这也是一个阿姆斯特朗数字):

Enter the maximum limit for searching
9999
0
1
2
3
4
5
6
7
8
9
153
370
371
407
1634
8208
9474

1
投票

你的 isAmstrong 公式本身似乎是错误的。

尝试使用 Math.Pow(x % 10, 3) 的求和来代替:

sum = sum + x % 10;
x = x / 10;

使用

sum = sum + Math.Pow(x % 10, 3);
x = x / 10;

查看 Amstrong 号码:

http://www.cs.mtu.edu/~shene/COURSES/cs201/NOTES/chap04/arms.html


0
投票

你永远不会用当前数字检查你的号码长度功率,因为wikipedia说;

在娱乐数论中,阿姆斯特朗数是 其自身数字的 次方之和 位数.

我根据此修复了你的方法;

static bool isArmstrong(int x)
{
    int sum = 0;
    int tempX = x;
    int temp = 0;
    int length = x.ToString().Length;

    while (x != 0)
    {
        temp = x % 10;
        x = x / 10;
        sum += (int)Math.Pow(temp, length);
    }

    if (sum == tempX)
        return true;
    else
        return false;
}

例如,如果您呼叫所有小于

10000
的阿姆斯特朗号码,则用

for (int i = 1; i < 10000; i++)
{
     if (isArmstrong(i))
         Console.WriteLine(i);
}

你将会得到

0
1
2
3
4
5
6
7
8
9
153
370
371
407
1634
8208
9474

0
投票
    int num=407;
    int nnum=num;
    string ss = num.ToString();
    int a=0;
    int b=0;string aa=" ";
    double newA=0;

    for(int i=0 ; i < ss.Length ; i++)
    {
        if(num > 0)
        {
            if(num < 10)
            {
                num = num+10;

            }
                a=num%10;
                aa += a+" ,";
                string s = num.ToString();
                string str=s.Remove(s.Length-1,1);
                s=str;
                b=int.Parse(s);
                newA += Math.Pow(a,3);
                Console.WriteLine("((({0})))",newA);
                num=b;
                Console.WriteLine(aa);
                num=int.Parse(str);
    }
            if(nnum==newA)

            {
                Console.WriteLine("\n\n\n\n {0} is a strong number .... !",nnum);
            }

    }

0
投票

我编写了下面的代码来查找给定的数字是否是阿姆斯特朗数字,并且效果很好

创建了一个名为 Armstrong 的新静态方法,并带有字符串参数

public static void Armstrong(string i)
        {
            double k=0;
            for (int j = 0; j < i.Length; j++)
            {
                k = k + Math.Pow(Convert.ToInt16(Convert.ToString(i[j])), i.Length);
            }

            if (k == int.Parse(i))
            {
                Console.WriteLine("Armstrong");
            }

            else
            {
                Console.WriteLine("Not Armstrong");
            }
        }

如果我们调用Main方法中的方法,那么我们可以得到所需的输出

阿姆斯特朗(“153”);

结果:阿姆斯特朗

同样,如果我们想知道一个数字是否是armstrong,那么将所需的数字保留为方法的参数并执行


0
投票
    public bool IsArmstrongRecur(int number,int result=0,int Real=0,int Length = 0)
{
    Real=Real==0?number:Real;
    Length=Length==0?number.ToString().Length:Length;
    if (number > 0)
    {
        result += (int)Math.Pow(number % 10, Length);
        return IsArmstrongRecur((number / 10), result, Real, Length);
    }
    else
    {
        if (Real == result) return true;
        else return false;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.