我用 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;
}
}
}
我看不出我做错了什么。
阿姆斯特朗数解释:
其数字的立方和必须等于数字本身。
例如,
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
你的 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
你永远不会用当前数字检查你的号码长度功率,因为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
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);
}
}
我编写了下面的代码来查找给定的数字是否是阿姆斯特朗数字,并且效果很好
创建了一个名为 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,那么将所需的数字保留为方法的参数并执行
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;
}
}