大家好
欢迎继续学习C++语言程序设计
接下来这一节呢
还是给大家介绍一个例题
这个例题也是要用到函数
这个题目要求我们找回文
而且要找这样的数 m
m的平方 m的三次方
均为回文的数
回文是什么呢
也就是说这个数字
它正着念 反着念是一样的
比如121 它就是一个回文
那我们还要判断
这个数本身
它的平方 它的立方
是不是都是回文
这样两个方面的事情合在一起
对于初学者来讲
又会觉得这个程序无从下手
怎么考虑呢
依然是功能分解
现在我们就来看怎么写程序
来求这个回文的问题
那这道题要求我们求
11到999之间的
符合这样要求的数
符合什么要求呢
m m平方 m立方都是回文
那这里给出一个例子
11就是这样一个数字
11还有11的平方 121
还有11的三次方 它们都是回文
那怎么样去判断
这个区间内任意一个数
是不是回文呢
首先我们来分析一下
要判断从11到999
这个区间之内的所有数
谁满足这样一个条件
那么显然是要用循环的
因为你要遍历
这个区间内的所有的数
要用循环把它全走一遍
要有个循环结构的
另外就是
我们在循环中怎么又去判断
一个数
它的平方
它的三次方都是回文呢
我们仍然用功能分解的方式
把它分开
用一个单独的函数
去判断一个数是不是回文
然后这样的话
这个程序逻辑就简单了
好 判断一个数是不是回文
用什么样的算法呢
那就是把这个数呢
给它颠倒过来 反序一下
然后看一看反序以后的数
跟原来那个数
是不是相等的
如果是相等的
那么它就是回文
现在怎么样将一个数的各个数位
反序呢
那么最简单的办法
大家直觉应该想到
除以10取余
不就每一次
可以取出一个最低位吗
对 就是用这样的办法
就是用除以10取余的办法
不断除以10取余数
那么最早取出来的这个数
就作为最高位
最后取出来那个数
就作为最低位
这样就形成了将一个数字
它的各个位数反序这样的效果
反序以后
我们再比较一下
跟原来是不是相等
那么不就是可以判断
它是不是回文了呢
接下来呢
我们来看一下程序的代码
现在我们首先来写一个函数
用来判断一个数是否回文
好 我们来看这个代码
怎么判断这个数是否回文呢
也就是说
如果这个数正着读
反着读都一样就是回文
那首先第一步
我们就需要把这个数先反转
怎么反转呢
还是用除以10取余的方式
不断地从最低位取出一个数来
但是
不仅仅是从最低位取出个数来
还要达到反转的目的
就是最先从最低位取出来的数
在最终结果数据中
它应该是那个最高位
所以我们看这里
每次除以10取余
将这个结果值
往m上面累加之前呢
m原来的值要乘以10
m的初始值是0
所以
个位数 最低位取出来的时候
是在0的基础上去累加
下一次再累加的时候
就会把以前曾经累加过的值
乘以10 然后再累加上
刚取出来的这个当前最低位
每一次取出一个当前最低位以后
我们就要把这个i的值
真的去除以10
然后只取那个商数
留着下一次用
好 就这样把这个while循环
不断地进行
直到i等于0的时候
就是全部的位数都处理完了
反转以后的数据
也就形成了存到了m里面了
这个时候呢
我们来判断m和n是否相等
就可以了
如果m等于n
这件事为真
就说明这个数正着读
反着读都是一样的
它就是一个回文
如果m等于n这件事情为假
就说明这个数不是回文
所以如何判断一个数是不是回文
这件事
我们用一个独立的函数解决了
接下来呢
在主函数中就方便了
大家看
我们只要用一个for循环
for循环是计数循环
只要用一个for循环
从11开始到999
也就是小于1000 在这个范围内
依次遍历所有的数据
每遍历一次 判断一次m++
也就是m自己自增1
每一次如何去判断一个数
它自己 它平方
它的三次方是不是回文呢
很简单
在这个if的条件里面
连续三次调用这个判断
是否回文的函数
这个symm这个函数
判断m自己 m乘以m
还有m的三次方
它们是否回文
这个函数的返回值应该是真
或者是假 是一个布尔值
所以把三次的返回值
用逻辑语连接起来
进行与运算
与运算的结果如果是真的
那一定这三次调用函数的返回值
都是真
只要有一次是假
与预算的结果就会是假 对吧
所以呢
当这与预算结果为真的时候
就说明m m的平方
m的三次方它们均为回文
也就是这个时候呢
这个if的条件为真
好 那我们只要输出这个m的值
还有它的平方
还有它的三次方就可以了
大家看
经过功能分解
这个题是不是很简单了呢