C语言·水仙花

前言说明

提前确定系数的值(代码中默认为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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值