在上面提到的我想问我做错了什么在我的代码我已经尝试调试它很多次,但无法理解的逻辑错误在我的代码。
任何帮助都将不胜感激。
#include <stdio.h>
#include <math.h>
int digit(int n);
int digit(int n) {
int a;
double i = 0;
do {
a = n % (int)(pow(10, i));
i++;
} while (a != n);
return i;
}
void is_armstrong(int n);
void is_armstrong(int n) {
int a, b;
double sum;
for (int i = 0; i < digit(n); i++) {
a = n / (int)pow(10, (double)i);
b = a % 10;
sum += pow((double)b, 3);
}
if ((int)sum == n) {
printf("%d is an armstrong number.\n", n);
}
}
int main() {
int a, b;
printf("Please input the left hand limit of range : \n");
scanf(" %d", &a);
printf("Please input the right hand limit of range : \n");
scanf(" %d", &b);
for (int i = a; i <= b; i++) {
is_armstrong(i);
}
is_armstrong(153);
return 0;
}
这个代码甚至没有显示阿姆斯特朗的号码153。
2条答案
按热度按时间ktecyv1j1#
不需要计算
n
中的位数,您只需对每个位数的立方求和,每次迭代时一个立方除以10。以下是一个简化版本:
kx1ctssn2#
注意到关于使用幂函数的评论以及在给定范围内识别阿姆斯特朗数的最终结果,我做了一些重构来简化识别这些数的过程。
以下是一些要点。
以下是端子的测试输出。
并且作为确认,可以看出值“153”被识别为阿姆斯特朗数。
给予代码片段,看看它是否符合项目的精神。