用c++查找阿姆斯特朗数
Finding Armstrong Number using C++
我正在编写一个程序,用于查找给定的数字是否为阿姆斯特朗数:
int main()
{
int n,rem,sum=0;
cout<<"Enter the Number for checking"<<endl;
cin>>n;
while(n!=0)
{
rem=n%10;
sum=sum+(rem*rem*rem);
n=n/10;
}
if(sum==n)
{
cout<<"Armstrong Number"<<endl;
}
else
{
cout<<"It's not a armstrong number";
}
return 0;
}
当我运行它时,无论输入什么,它总是报告" it 's not a armstrong number"。
我将代码修改如下,得到了正确的结果。但是我不明白为什么我需要将输入赋值给n1
并进行操作-为什么我不能直接对n
进行操作?
int main()
{
int n,rem,sum=0,n1;
cout<<"Enter the Number for checking"<<endl;
cin>>n;
n1=n;
while(n1!=0)
{
rem=n1%10;
sum=sum+(rem*rem*rem);
n1=n1/10;
}
if(sum==n)
{
cout<<"Armstrong Number"<<endl;
}
else
{
cout<<"It's not a armstrong number";
}
return 0;
}
在if (sum==n)
行中,程序比较sum
和n
。在第二个程序中,n
是用户输入的初始号码。但在第一个程序n==0
(见上面的循环)。
因此,在第一个程序中,检查if (sum==n)
作为if (sum==0)
工作。但是sum
的值从来不是0(除非用户输入0),所以第一个程序总是返回"It's not a armstrong number"
关于风格:使用函数而不是将整个逻辑放入一个main()
函数中要好得多。例如,您可以创建一个函数,用于计算检查阿姆斯特朗数的中间和:
int getSumOfCubesOfDigits(int n)
{
int sum = 0;
while (n)
{
const int rem = n % 10;
sum += rem * rem * rem;
n = n / 10;
}
}
在这种情况下,你的程序将更简单,并且将很难犯你在问题的第一个程序中犯的错误:
int main()
{
int n;
cout << "Enter the Number for checking" << endl;
cin >> n;
if(getSumOfCubesOfDigits(n) == n)
cout<<"Armstrong Number"<<endl;
else
cout<<"It's not a armstrong number";
return 0;
}
在第一个程序中,将原始数字输入'n'。你的逻辑中唯一的问题是,你忘记了当你退出while循环时,'n'将不再是你的原始数字,因为你重复地做n=n/10,因此'sum==n'即使对阿姆斯特朗数也永远不满足。
因此,在进入while循环之前,将原始数字保存到另一个变量中,例如n1(正如在您提供的第二个程序中所做的那样),并且只使用n1进行操作,即n1=n1/10。不考虑n,这样'n'最终仍然包含原始数字,您可以最终将其与'sum'进行比较以找到您的答案。
你比较哪个数字?,在while循环的第一个程序中,n值被改变(在这个变量中你得到输入),最后用sum == n检查,所以它总是得到条件失败。
因此需要temp (n1)变量来比较最终结果
你的代码在第二个代码块中是不同的,你仍然在测试是否sum=n。
在第二个代码块中,如果测试if(sum=n1),我怀疑它的工作原理是一样的。
我得到了这个解决方案来寻找阿姆斯特朗数
int main() {
for (int i=10; i<=9999; i++) {
int k = i,z = 1, s = 0, n = i;
while ((k/=10) > 0) z++;
for (int t = z; t; t--, n/=10) {
s += pow(n % 10, z);
}
if (i == s) cout << i << endl;
}
return 0;
}
- 康斯特指针C++斯特劳斯特鲁普
- C++:根据斯特劳斯特鲁普的例子播种随机数
- C++:斯特劳斯特鲁普iterator_traits示例不编译?
- packaged_task示例问题?斯特劳斯特鲁普示例修改
- Static_cast 对于康斯特来说,会抛弃预选赛
- 输入 A,B 输出 [A,B] 中的所有阿姆斯特朗数 1 和 1<=A<=B<=10^7
- 东康斯泰克普/康斯蒂尼特/康斯特瓦尔在C++20 中允许吗?
- 康斯特正确性建议
- 如何修复我的 c++ 毕达哥拉斯三重查找器中的'access violation reading location'错误?
- 什么是斯特伦省略?
- 从字符到康斯特* 字符的转换无效,代码有什么问题?
- C++ 斯特劳斯特鲁普的"std_lib_facilities.h"字符串结构 – 警告:无符号表达式的比较
- 程序中的错误,无法在用户给定的间隔之间查找阿姆斯特朗数
- 阿姆斯特朗数字打印错误
- 阿姆斯特朗数字的代码不起作用
- 带循环的阿姆斯特朗数 - c++
- 阿姆斯特朗C++号
- 没有输出,我已经编了一个程序去找所有阿姆斯壮没有.在100到1000之间
- 生成阿姆斯特朗数的简单c++代码
- 用c++查找阿姆斯特朗数