前言说明
提前确定系数的值(代码中默认为3)。输入一个数,求出每位的y次方的总和。判断是否等于你输入的数。
如果是则为水仙花数。
实现思路
将输入的数;个位单独提出算;
从十位开始;输入的数/10;使其为个位;在%10;得出此数;
百位;输入的数/100;使其位个位;在%10;得出此数;
千位;输入的数/1000;使其位个位;在%10;得出此数;
(以此类推)即可得出每位的数
再将每次得出每位的数的y次方相加;得出最后的总值。
流程图
暂无
水仙花·代码·有注释
/* 水仙花 */
#include <stdio.h>
#include <math.h>/* 用于计算几次方 */
#define y 3 /* 系数的值 */
int main(int argc, char* argv[])
{
int value_1;/* 你输入的一个值 */
int value_2=1;/* 初值必须为1;用于for循环 */
int value_3 = 1;/* 用于计数器(初值为1);用于for循环(从十为开始,初值必须为1) */
int value_4 = 0;/* 用于统计输入的数一共有多少位 */
int sum_1 = 0;/* 暂存个位数的值;存每位的次方的和的值 */
printf("请输入你要判断水仙花的数:");
scanf_s("%d", &value_1);/* 输入一个数 */
/* 计数器 */
do
{/* 统计输入数的位数 */
value_3=value_3*10;
value_4++;
} while (value_1 / value_3);
/* 计数器 */
sum_1 = pow(value_1 % 10, y);/* 个位数的值的次方 */
/* 循环求值;从十位开始 */
for (value_3 = 1; value_3 < value_4; value_3++)
{/* 总需循环数=输入的数的位数-1 */
value_2 = value_2 * 10;/* 用于使前一位成为个位 */
sum_1 = sum_1 + pow(value_1 / value_2 % 10,y);/* 计算求每位y次方的总和 */
}
/* 循环求值;从十位开始 */
if (sum_1 == value_1)/* 将输入的数的y次方的总和与输入的数进行对比 */
{
printf("\n%d经过每位数的%d次方后的总值是其本身\n", value_1, y);
printf("所以%d是一个水仙花数\n",value_1);
}
else {
printf("\n%d经过每位数的%d次方后的总值是%d\n", value_1, y, sum_1);
printf("所以%d不是一个水仙花数\n", value_1);
}
return 0;
}
水仙花·代码
/* 水仙花 */
#include <stdio.h>
#include <math.h>
#define y 3
int main(int argc, char* argv[])
{
int value_1;
int value_2=1;
int value_3 = 1;
int value_4 = 0;
int sum_1 = 0;
printf("请输入你要判断水仙花的数:");
scanf_s("%d", &value_1);
do
{
value_3=value_3*10;
value_4++;
} while (value_1 / value_3);
sum_1 = pow(value_1 % 10, y);
for (value_3 = 1; value_3 < value_4; value_3++)
{
value_2 = value_2 * 10;
sum_1 = sum_1 + pow(value_1 / value_2 % 10,y);
}
if (sum_1 == value_1)
{
printf("\n%d经过每位数的%d次方后的总值是其本身\n", value_1, y);
printf("所以%d是一个水仙花数\n",value_1);
}
else {
printf("\n%d经过每位数的%d次方后的总值是%d\n", value_1, y, sum_1);
printf("所以%d不是一个水仙花数\n", value_1);
}
return 0;
}
结语
编程新手。此代码有错误的或者有意见的,欢迎致信!
QQ邮箱:2787485199@qq.com