c - 在 C 中打印 Armstrong 数字
问题描述
这是一个程序,用于查找 1-1000 之间的 Armstrong 数(数字的每个数字的立方和等于数字本身)。它正确打印了一些数字,但它没有打印 153。我的问题是为什么会这样153被排除在外了吗?先感谢您。
#include<stdio.h>
#include<math.h>
void main()
{
int i,save,rem;
for(i=1;i<1000;i++)
{
int s=0;
int save=i; /*Creating copy of the
variable i.*/
while(save!=0)
{
rem=save%10;
save/=10;
s+=pow(rem,3.0);
}
if(i==s) //Comparing i with the sum.
printf("\n%d",i); //Printing armstrong number.
}
}
解决方案
在 Windows 7 上使用 gcc 适用于 pow。但是,此代码可能有助于您避免使用 pow() 进行四舍五入。
此代码还简化了循环并删除了保存的重新声明。
#include <stdio.h>
int main(void) {
int i, sum, ones, tens, hunds;
for(i = 1; i < 1000; i++) {
sum = i/10;
ones = i%10;
tens = sum%10;
hunds = sum/10;
sum = ones*ones*ones + tens*tens*tens + hunds*hunds*hunds;
if(i == sum)
printf("\n%d", i);
}
}
编辑
根据@Brij Raj Kishore 的评论,如果帖子确实打算显示所有 Armstrong 数字 1-1000,请用以下 for 循环替换上述内容。
for(i = 1; i < 1000; i++) {
sum = i/10;
ones = i%10;
tens = sum%10;
hunds = sum/10;
if(!(hunds | tens))
sum = ones;
else if (hunds == 0 && tens != 0)
sum = ones*ones + tens*tens;
else
sum = ones*ones*ones + tens*tens*tens + hunds*hunds*hunds;
if(i == sum)
printf("\n%d", i);
}
推荐阅读
- python - 使用 Python 遍历与列匹配的日期
- c# - AutoMapper 9.0:AutoMapperMappingException:“缺少类型映射配置或不支持的映射。”
- git - 删除分叉并推送到新的仓库
- sql - 如果行状态改变,则删除行
- c# - 基于非主键的ef核心查询
- kubernetes - 谁启动 kube-apiserver 以及如何配置其启动参数?
- reactjs - 来自另一个 React 类中使用的一个 React 类的状态值
- php - PUT 请求到带有标头的另一台服务器不起作用
- php - 使用 PHP 类方法从按钮单击计数器
- javascript - 如何在点击事件jquery中使用点击事件