运行出来是零 代码也没报错 不知道哪里出了问题
import java.util.Scanner;
public class x{
public static void main(String[] args) {
int count = 0;
Scanner sc = new Scanner(System.in);
System.out.println("请输入范围的较小三位数:");
int min = sc.nextInt();
System.out.println("请输入范围的较大三位数:");
int max = sc.nextInt();
for(int i = 0; i >=min & i <= max;i++){
int a = i%10;
int b = i/10%10;
int c = i/100;
if(a*a*a + b*b*b + c*c*c == i){
count++;
}
}
System.out.println("水仙花数的个数是"+ count);
}
}
是&&不是&
for(int i = 0; i >=min & i <= max;i++){
改为
for(int i = min; i <= max;i++){
问题解决方案:
问题出在代码中的计算部分。在原始代码中,使用的是数组来存储输入的区间内的数值,然后逐个计算每个数值是否为水仙花数。但是这种方法存在问题,每次判断都需要遍历整个数组。所以即使输入区间内有水仙花数,也无法得到正确的结果。
解决这个问题需要对代码进行优化。可以采用循环遍历的方式,逐个判断数字是否是水仙花数。
下面是优化后的代码示例:
#include <stdio.h>
int isNarcissisticNumber(int num);
int main() {
int m, n;
printf("请输入检测是否水仙花的区间的值:\t");
scanf("%d%d", &m, &n);
int count = 0;
for (int i = m; i <= n; i++) {
if (isNarcissisticNumber(i)) {
printf("%d\t", i);
count++;
}
}
if (count == 0) {
printf("在区间[%d, %d]内没有水仙花数\n", m, n);
}
return 0;
}
int isNarcissisticNumber(int num) {
int a = num / 100; // 取百位
int b = num % 100 / 10; // 取十位
int c = num % 10; // 取个位
if (num == a * a * a + b * b * b + c * c * c)
return 1;
else
return 0;
}
这个示例中,我们使用了isNarcissisticNumber
函数来判断一个数字是否是水仙花数。在主函数中,我们对输入的区间进行遍历,逐个判断并输出水仙花数。
同时在输出部分,我们加入了一个计数器count
,用来判断是否有水仙花数存在。如果count
为0,说明在输入的区间内没有水仙花数。
希望这个解决方案能够帮到你。如果还有任何问题,请随时向我提问。