镜缘浮影 小人本住在 苏州的城外 家里有屋又有田 生活乐无边

那些年我们一起忘掉的C (二).水仙花数

2016-11-20
wilmosfang
c
原文地址 http://soft.dog/2016/11/20/c-basic-02/

前言

日积跬步,可至千里


概要


打印所有水仙花数

打印所有 “水仙花数”,所谓 “水仙花数” 是指一个三位数,其各位数字立方和等于该数本身

例如,153是一个水仙花数,因为153=1的立方 + 5的立方+ 3的立方

代码注解

#include <stdio.h>

void main() // void 代表主函数没有返回值,空括号代表主函数不带参;大部分情况下都是如此,但是主函数是可以带参的,形式是这样: void main(int argc,char *argv[]),argc 是包括执行文件本身在内的参数总个数,argv是一个字符型指针数组,里面依次装有参数的字符串
{
	int i,a,b,c; //定义四个整型变量
	for (i=100;i<1000;i++) // 给i赋初值100,在[100,999]的范围内,i会逐1自增 
		{
			a=i/100; //将的百位取出赋予a,因为整型之间的算数运算结果还是整型(会舍去小数位)所以利用这个特性与100相除可以取出百位的数值
			b=i%100/10; //将i的十位取出赋予b,与100的取模,可以得到低两位的值,再除10可以得到十位的值,原理同上
			c=i%10; //将i的个位取出赋予c,直接对10取模就可以获得个位的余值
			if (i == a*a*a+b*b*b+c*c*c) printf("%d\n",i); //判断i的值是否与自己个十百各位的立方和相等,如果相等就打印输出
		}    
}

思路

思路还是相对简单

通过水仙花数的定义,可知我们的甄选范围是所有的三位数整数,因此这里需要一次对[100,999]的遍历

然后关键就是如何将这个三位数的个十百位数值分别取出

紧接着就是将值进行比较,符合特性的进行输出

这里还有另一种路径,就是分别对这个三位数的个十百位进行遍历,个位范围[0,9],十位范围 [0,9],百位范围[1,9],然后使用这些数值来构建这个三位数,然后进行比较和过滤

基础知识点

  • 循环与控制
  • 条件判断
  • 基本算术运算
  • 终端格式输出
原文地址 http://soft.dog/2016/11/20/c-basic-02/

评论