代码编织梦想


#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable:6031)
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
int main()
{
	int i = 0;
	for (i = 0; i <= 100000; i++)
	{
		int n = 1;
		int temp = i;
		while (temp / 10)
		{
			n++;
			temp = temp / 10;
		}
		temp = i;
		int sum = 0;
		while (temp)
		{
			sum += pow(temp % 10, n);
			temp = temp / 10;
		}
		if (sum == i)
		{
			printf("%d ", i);
		}
		
	}
	return 0;
}

不过这个不是真正的水仙花数,因为水仙花数是指一个 n 位数 ( n>=3 ),它的每个位上的数字的 n 次幂之和等于它本身,而 1、2 位数的数字本身的 n 次幂之和无法等于它们本身。

 那该如何解决呐?

int main()
{
	int i = 0;
	for (i = 0; i <= 100000; i++)
	{
		int n = 1;
		int temp = i;
		while (temp / 10)
		{
			n++;
			temp = temp / 10;
		}
		temp = i;
		int sum = 0;
		if (n >= 3)
		{
			while (temp)
			{
				sum += pow(temp % 10, n);
				temp = temp / 10;
			}
			if (sum == i)
			{
				printf("%d ", i);
			}
		}	
	}
	return 0;
}

  代码中修改后,避免输出1~9的数字,n>=3时才进行计算,也可以得到正确的水仙花数结果。所以,代码已经可以正确判断并输出水仙花数了。

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_62130773/article/details/130839966

c/c++内存管理-爱代码爱编程

本期我们来学习C/C++内存管理的相关知识 目录 1.内存划分 2.C语言中动态内存管理方式 3.C++内存管理方式 4.operator new与operator delete函数 5.new和delete的实现原理 6. 定位new表达式(placement-new) 7.常见面试题 7.1 malloc/free和new/delet