使用C++语言求水仙花数 100-1000,一个数个位的三次方+十位的三次方+百位的三次方=他本身 即153=1*1*1+5*5*5+3*3*3 求两个数的最大公约数和最小公倍数并输出
时间: 2024-01-17 11:55:36 浏览: 113
水仙花数的求解(C++)
#include <stdio.h>
// 判断一个数是否是水仙花数
int isNarcissistic(int num) {
int a = num / 100; // 百位数
int b = num / 10 % 10; // 十位数
int c = num % 10; // 个位数
return num == a*a*a + b*b*b + c*c*c;
}
// 求最大公约数
int gcd(int a, int b) {
if (b == 0) {
return a;
} else {
return gcd(b, a % b);
}
}
// 求最小公倍数
int lcm(int a, int b) {
return a * b / gcd(a, b);
}
int main() {
int maxNum = 1000;
int minNum = 100;
int narcissisticCount = 0; // 水仙花数的个数
int narcissisticSum = 0; // 水仙花数的和
int maxGcd = 0; // 最大公约数
int minLcm = 1; // 最小公倍数
for (int i = minNum; i <= maxNum; i++) {
if (isNarcissistic(i)) { // 如果是水仙花数
narcissisticCount++;
narcissisticSum += i;
}
}
// 计算最大公约数和最小公倍数
for (int i = minNum; i <= maxNum; i++) {
if (isNarcissistic(i)) { // 如果是水仙花数
maxGcd = gcd(maxGcd, i);
minLcm = lcm(minLcm, i);
}
}
// 输出结果
printf("100-1000之间的水仙花数个数为:%d\n", narcissisticCount);
printf("100-1000之间的水仙花数的和为:%d\n", narcissisticSum);
printf("100-1000之间的水仙花数的最大公约数为:%d\n", maxGcd);
printf("100-1000之间的水仙花数的最小公倍数为:%d\n", minLcm);
return 0;
}
阅读全文