C语言找到三位水仙花数

//所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。
//例如:153是一个"水仙花数",因为153 = 1的三次方+5的三次方+3的三次方。

第一种方法:

  使用循环进行求解,从100到999遍历所有的3位数,通过计算每个数字的个位、十位和百位的立方和,判断是否等于原数字。循环遍历的次数是固定的(共有900次),时间复杂度为O(1)

#include 
#include 
int main() {
	int ge= 0,shi=0,bai=0;
	for (int i = 100; i < 1000;i++) {
		ge=i % 10;
		shi = (i/10) % 10;
		bai = (i/100)%10 ;		
		if (i==pow(ge,3) + pow(shi,3)+pow(bai,3)) {
			printf("%d ", i);
		}
	}
	return 0;
}

第二种方法:

  使用递归函数进行求解,它从100开始,每次递增1并判断是否为水仙花数,直到找到所有的水仙花数为止。该递归方式的时间复杂度为O(N),其中N是水仙花数的个数。对于3位数的水仙花数而言,个数是固定的(共有4个),时间复杂度为O(1)

#include 
#include 
int JugdeNarcissus(int x) {
	int ge = x % 10;
	int shi= (x / 10) % 10;
	int bai= (x / 100) % 10;
	int s = pow(ge, 3) + pow(shi, 3) + pow(bai, 3);
	if (x !=s) {
		return JugdeNarcissus(x + 1);
	}
	else {
		return x;
	}
}
int main() {
	int i = 100;
	int result = JugdeNarcissus(i);
	while (result < 1000) {
		printf("%d ", result);
		result = JugdeNarcissus(result+1);
	}
	return 0;
}

  需要注意的是,如果要求解任意位数的水仙花数,递归函数的实现方式将导致递归层数增加,会对性能和内存消耗产生更大的影响。在这种情况下,使用循环的方式更加高效。

你可能感兴趣的:(C语言,c语言,开发语言)