介绍水仙花数:
首先,它是一个3 位数,而且它的每个数位上的数字的 3次幂之和等于它本身
例如153=1^3+5^3+3^3=1+125+27
步骤:
第一步:分离出这个三位数的三个数字
void getnum(int num , int* arr)
{
int i = 0;
for (i = 0; i < 3; i++)
{
arr[2-i] = num % 10;
num /= 10;
}
}
有一点务必要注意,当我们要对主函数中的变量进行改变的时候,一定要传入该变量的地址,否则,由于作用域有限,改变只能在子函数中有效,无法影响在主函数中变量的值
第二步:计算数字各个位置的三次方
int cube(int num)
{
return num * num * num;
}
第三步,计算各个三次方之和
int sumcube(int *arr)
{
int sum = 0;
int i = 0;
for (i = 0; i < 3; i++)
{
sum += cube(arr[i]);
}
return sum;
}
第三步:判断是否和原数字相等(在住函数中做逻辑判断)
我们一般是,子函数中执行功能,主函数中执行逻辑判断
int main()
{
int i = 0;
int arr[3] = {9,9,9};
for (i = 100; i < 1000; i++)
{
getnum(i, arr);
if (i ==sumcube(arr))
{
printf("%d\n", i);
}
}
return 0;
}
完整的代码如下
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<windows.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
void getnum(int num , int* arr)
{
int i = 0;
for (i = 0; i < 3; i++)
{
arr[2-i] = num % 10;
num /= 10;
}
}
int cube(int num)
{
return num * num * num;
}
int sumcube(int *arr)
{
int sum = 0;
int i = 0;
for (i = 0; i < 3; i++)
{
sum += cube(arr[i]);
}
return sum;
}
int main()
{
int i = 0;
int arr[3] = {9,9,9};
for (i = 100; i < 1000; i++)
{
getnum(i, arr);
if (i ==sumcube(arr))
{
printf("%d\n", i);
}
}
return 0;
}