C#中的阿姆斯特朗号

时间:2016-02-04 07:41:54

标签: c# math

我用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;
        }
    }
}

我无法看到我做错了什么。

5 个答案:

答案 0 :(得分:3)

Armstrong-Number的解释:

  

其数字的多维数据集的总和必须等于数字本身。

例如,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 :(得分:1)

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

尝试使用Math.Pow(x%10,3)的总和而不是:

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

使用

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

结账阿姆斯特朗号码:

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

答案 2 :(得分: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

答案 3 :(得分: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);
            }

    }

答案 4 :(得分: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”);

结果:阿姆斯特朗

类似地,如果我们要查找一个数字是否为阿姆斯壮,则将所需的数字保留为方法的参数并执行