我用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;
}
}
}
我无法看到我做错了什么。
答案 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”);
结果:阿姆斯特朗
类似地,如果我们要查找一个数字是否为阿姆斯壮,则将所需的数字保留为方法的参数并执行