#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<math.h>
int main()
{
int m = 0,k =0, a = 0;
int t = 0;//输入数值变量
double result = 0;
printf("请输入一个数值\n");
scanf("%d", &t);
a = t; //保存数值
while (t != 0)//用while 循环求位数
{
t = t / 10;
m++;
}
a = t;//保存数值 ❌
while (a % 10 != 0)
{
k = a % 10;
result = result + pow(k, m);//求和
a = a/ 10;
}
if (a == result)//判断是否相等
{
printf("是Armstrong");
}
else
{
printf("不是Armstrong");
}
return 0;
}
#include<stdio.h>
#include<math.h>
int main()
{
int n,m = 0,p = 0,x,y;
printf("请输入一个数字: "); //最大能支持9位数字的判断
scanf("%d",&n);
y = n;
while(y > 0) //使用while循环判断数字的位数,进而判断数字的次幂
{
y = y / 10;
p++;
}
y = n;
while(n > 0) //使用while循环进行次幂运算
{
x = n % 10;
m+= pow(x,p);
n = n / 10;
}
if(y == m) //比较次幂运算值和原始值是否相等
{
printf("这个数是armstrong数");
}
else
{
printf("这个数不是armstrong数");
}
return 0;
}
就是从这样一道看起来很简单的题目中体悟到了许多细节:
①在进行过第一部分的运算过后,我们输入的t\y的值已经改变为计算所得到的结果 不能直接用现在的t\y进行下一步计算
这就是第一个代码错误的地方 因此很关键的一步就是y=n 第一次对y运算第二次才对n运算
②优化 本题中while循环内的判断条件 可进行优化:
很明显>0的这种写法更加简单 也便于我们自我检验计算 (while(n))也是一种非常简单的写法!!