#include<stdio.h>
int main()
{
int i=1, j=1, n,chushi=1;
scanf_s("%d", &n);
while (i < n)
{
chushi = chushi * 10;
i++;
}
int k = chushi;
while (k < chushi * 10)
{
int m = k;
int t, l=1, sum = 0;
t =m% 10;
m = m/ 10;
while (m> 0)
{
while (j < n)
{
l*= t;
j++;
}
sum += t;
}
if (sum ==k)
{
printf("%d\n", k);
}
k++;
}
}
根据你的代码,我做了一些修改和补充:
#include <stdio.h>
int main()
{
int n;
scanf("%d", &n);
for (int k = 100; k < 1000; k++)
{
int sum = 0;
int temp = k;
while (temp > 0)
{
int digit = temp % 10;
sum += digit * digit * digit;
temp /= 10;
}
if (sum == k)
{
printf("%d\n", k);
}
}
return 0;
}
这段代码会找出所有的三位水仙花数并打印出来。我使用了一个 for 循环来遍历所有的三位数,并使用一个 while 循环来计算每个数的各位数字的立方和。如果立方和等于这个数本身,那么就打印出该数。
如若有用,还望博友采纳!
-2
可以帮助您解决这个问题。首先,让我们一步一步地分析您提供的代码,并解释其含义和作用。
代码中主要有两个部分,一个是判断一个给定数字是否为水仙花数的部分,另一个是输出所有的水仙花数的部分。
int N, a, b, c;
scanf("%d",&N);
if(100<=N&&N<=999){
a=N%10; // 分离出个位的数字
b=N/100; // 分离出百位的数字
c=(N%100-a)/10; // 分离出十位的数字
if(N==a*a*a+b*b*b+c*c*c){
printf("Yes");
}else{
printf("No");
}
}else{
printf("Invalid Value.");
}
这段代码中,首先通过scanf
函数获取用户输入的数字,并将其保存在变量N中。然后通过取余和整除操作分离出该数字的个位、十位和百位数字,分别保存在变量a、b和c中。接着,根据水仙花数的定义,判断N是否等于各位数字立方和,如果是,则输出"Yes",否则输出"No"。如果N不是三位数,则直接输出"Invalid Value."。
这段代码中的逻辑是正确的,没有错误。对于任意三位数的输入,都能正确判断其是否为水仙花数。
for (int i = 100; i <= 999; i++)
{
Hundredth = i / 100; // 取百位
Ten = (i / 10) % 10; // 取十位
Bit = i % 10; // 取个位
if ((Hundredth * Hundredth * Hundredth) + (Ten * Ten * Ten) + (Bit * Bit * Bit) == i)
printf("%d\n", i);
}
这段代码使用了一个循环,从100循环到999。在每次循环中,通过整除和取模操作分别取出当前数字的百位、十位和个位数字,并保存在对应的变量中。然后根据水仙花数的定义,判断当前数字是否为水仙花数,如果是,则使用printf
函数输出该数字。
这段代码有一个小错误,即在循环之前没有对Hundredth
、Ten
和Bit
进行声明。您可以在代码开头添加以下声明语句:
int Hundredth, Ten, Bit;
这样就能正确运行代码,并输出所有的水仙花数。