C语言 简单粗暴的笨方法找水仙花数

什么是水仙花数:

指一个n位数,其各位数字的n次方之和确好等于该数本身

例如:   

1         1^1=1;

153      3^3+5^3+1^3=153;

问题:求0~100000之间的水仙花数,并打印出来

看题目,找突破口:

  • 0~100000  我可以想到用循环来判断0~10000间的数字
  • 由栗子可知:我们需要求数字是几位
  • 要用到次方,则我们需要引用math函数库里的pow函数
  • 求和,依旧要使用循环

那么开始写代码,走一步思考一步:

#include <stdio.h>
#include <math.h>

int main()
{
	int i = 0;
	for (i = 0; i <= 100000; i++)
	{
		int n = 1;                // n 为位数
		int z = i;                //经过while后i改变,i未变前赋值给z,代替原值i进行后面的计算
		while (z / 10 != 0)          //这里刚开始直接用i进行运算  死循环
		{
			n++;
			z=z / 10;                //用i运算的话,当i=10时 i=i/10 直接等于1 ,死循环,所以用变量z代替i
		}
		if (i == Sum(i, n))        //判断和是否等于原值
			printf("%d ",i);
	}
	return 0;
}

看代码一定要看后面的注释,这里要注意的点:

用了n代表位数,求n时while循环会改变i值,不利于后面的计算,所以用z代替

设置函数Sum来计算和,函数代码如下:

int Sum(int x, int y)               //x接收i,y接收n
{
	int k = 0;
	int num = 0;
	int sum = 0;
	for (k=0;k<y;k++)             //循环求和
	{
		num = pow(x % 10, y);      //取出每一位的数字,求次方
		sum += num;                    //累加求和
		x/=10;                  //去掉最低位的数字
	}
	return sum;               //返回和
}

完整代码如下:

#include <stdio.h>
#include <math.h>

int Sum(int x, int y)
{
	int k = 0;
	int num = 0;
	int sum = 0;
	for (k=0;k<y;k++)
	{
		num = pow(x % 10, y);
		sum += num;
		x/=10;
	}
	return sum;
}

int main()
{
	int i = 0;
	for (i = 0; i <= 100000; i++)
	{
		int n = 1;
		int z = i;
		while (z / 10 != 0)
		{
			n++;
			z=z / 10;
		}
		if (i == Sum(i, n))
			printf("%d ",i);
	}
	return 0;
}

运行结果:

这样找水仙花数就完成了                      

到此这篇关于C语言 简单粗暴的笨方法找水仙花数的文章就介绍到这了,更多相关C语言 找水仙花数内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C语言趣味编程之水仙花数

    目录 题目描述 分析 代码实现 运行结果 题目描述 求出所有的水仙花数 分析 百度百科:水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI).自恋数.自幂数.阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身.例如:13 + 53+ 33 = 153. 判断一个数是否为水仙花数,可以先将该数的所有位都取出并存入数组,最后代

  • C语言水仙花数的实现

    什么水仙花数? 水仙花数其实是自幂数的一种,自幂数是一个自然数中它每个个位上的数字n次方相加之和为它本身!,这里n可以称为立方指数! 而水仙花数的n次方的n是3,这里3可以称为自然数的立方指数 次方即为自身相乘多少次,一般用^表示,比如1的3次方表示为:1^3 比如153这个数是一个水仙花数,为什么呢? 下面我们用公式来看一下: 153有三个数位 1.5.3 1的三次方为1: 1*1*1=1 列: 1*1=1 1*1=1 5的三次方为125: 5*5*5=125 列: 5*5=25 25*5=1

  • C语言经典算法例题求100-999之间的“水仙花数

    题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身. 例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方. 实现代码如下 #include <iostream> #include <Cmath> using namespace std; /* 求100-999之间的水仙花数 */ int main() { int number,hun,ten

  • C语言 简单粗暴的笨方法找水仙花数

    什么是水仙花数: 指一个n位数,其各位数字的n次方之和确好等于该数本身 例如:    1         1^1=1: 153      3^3+5^3+1^3=153; 问题:求0~100000之间的水仙花数,并打印出来 看题目,找突破口: 0~100000  我可以想到用循环来判断0~10000间的数字 由栗子可知:我们需要求数字是几位 要用到次方,则我们需要引用math函数库里的pow函数 求和,依旧要使用循环 那么开始写代码,走一步思考一步: #include <stdio.h> #i

  • java报错:找不到或无法加载主类的解决方法简单粗暴

    当我们在windows系统下安装完jdk时,测试案例HelloWorld:运行java命令时报错:找不到或无法加载主类 解决方法: 1.首先检查是否编译通过,生成了.class字节码文件 如果没有生成.class字节码文件,则需要执行javac编译命令编译源文件. 执行命令javac H:\javatest\HelloWorld.java(javac表示jdk内置编译命令:H:\javatest\HelloWorld.java表示源文件所在路径,这里我的测试源文件是位于H盘下,自己决定) 2.如

  • GO语言实现简单TCP服务的方法

    本文实例讲述了GO语言实现简单TCP服务的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package main import ( "net" "fmt" ) var (   maxRead = 1100     msgStop   = []byte("cmdStop")     msgStart  = []byte("cmdContinue")     ) func main() {       ho

  • go语言实现简单http服务的方法

    本文实例讲述了go语言实现简单http服务的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package main import (     "flag"     "log"     "net/http"     "text/template" ) var addr = flag.String("addr", ":1718", "http service

  • Go语言实现的简单网络端口扫描方法

    本文实例讲述了Go语言实现的简单网络端口扫描方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package main import (  "net"  "fmt"  "os"  "runtime"  "time"  "strconv" ) func loop(startport, endport int, inport chan int) {   for i :=

  • Go语言实现简单Web服务器的方法

    本文实例讲述了Go语言实现简单Web服务器的方法.分享给大家供大家参考.具体分析如下: 包 http 通过任何实现了 http.Handler 的值来响应 HTTP 请求: package http type Handler interface { ServeHTTP(w ResponseWriter, r *Request) } 在这个例子中,类型 Hello 实现了 http.Handler. 注意: 这个例子无法在基于 web 的指南用户界面运行.为了尝试编写 web 服务器,可能需要安装

  • Go语言实现简单留言板的方法

    本文实例讲述了Go语言实现简单留言板的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package main import (     // "fmt"     "io"     "log"     "net/http"     "text/template"     "time"     "database/sql"     "gi

  • C语言简单实现求n阶勒让德多项式的方法

    本文实例讲述了C语言简单实现求n阶勒让德多项式的方法.分享给大家供大家参考,具体如下: #include <stdio.h> float p(float x,int n) { float p_n; if(0==n) {p_n=1;} else if(1==n) { p_n=x; } else { p_n=((2*n-1)*x-p(x,n-1)-(n-1)*p(x,n-2))/n; } return p_n; } main() { int n; printf("input n :&qu

  • C语言简单实现计算字符个数的方法

    本文实例讲述了C语言简单实现计算字符个数的方法.分享给大家供大家参考.具体如下: char_counting.c如下: #include<stdio.h> int main() { long nc; nc = 0; while(getchar() != '0') { ++nc; } printf("%ld\n", nc); } 编译和使用下: 复制代码 代码如下: gcc char_counting.c -o char_counting.o 一种通常的调用方式: 复制代码

  • R语言最简单的向量赋值方法示例

    1. 生成等差数列的向量x x <- 1:10 #将x向量赋值为1 2 3 4 5 6 7 8 9 10 结果为 > x  [1]  1  2  3  4  5  6  7  8  9 10 2. 将x的值全部修改成0 x[] <- 0 #非常简洁的赋值方法,建议使用 x[1:length(x)] <- 0 #不建议使用的赋值方法 结果为: > x[] <- 0 > x  [1] 0 0 0 0 0 0 0 0 0 0 3.使用seq函数 x <- seq(

随机推荐