当前课程知识点:C++语言程序设计基础 >  第3章 函数 >  函数调用 >  例3-4

返回《C++语言程序设计基础》慕课在线视频课程列表

例3-4在线视频

例3-4

例3-4

寻找并输出11~999之间的数M,它满足M、M2和M3均为回文数。

l  回文:各位数字左右对称的整数。

l  例如:11满足上述条件

n  112=121,113=1331。

分析:

用除以10取余的方法,从最低位开始,依次取出该数的各位数字。按反序重新构成新的数,比较与原数是否相等,若相等,则原数为回文。

源代码:

#include <iostream>

using namespace std;

//判断n是否为回文数

bool symm(unsigned n) {

      unsigned i = n;

      unsigned m = 0;

      while (i > 0) {

        m = m * 10 + i % 10;

        i /= 10;

  }

  return m == n;

}


int main() {

      for(unsigned m = 11; m < 1000; m++)

        if (symm(m) && symm(m * m) && symm(m * m * m)) {

          cout << "m = " << m;

          cout << "  m * m = " << m * m;

          cout << "  m * m * m = "

               << m * m * m << endl;

        }

      return 0;

}

运行结果:

m=11  m*m=121  m*m*m=1331

m=101  m*m=10201  m*m*m=1030301

m=111  m*m=12321  m*m*m=1367631



下一节:例3-5

返回《C++语言程序设计基础》慕课在线视频列表

例3-4课程教案、知识点、字幕

大家好

欢迎继续学习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的值

还有它的平方

还有它的三次方就可以了

大家看

经过功能分解

这个题是不是很简单了呢

C++语言程序设计基础课程列表:

第1章 绪论

-导学

--第1章导学

-计算机系统简介

--计算机系统简介

--计算机系统简介 测试题

-计算机语言和程序设计方法的发展

--计算机语言和程序设计方法的发展

--计算机语言和程序设计方法的发展 测试题

-面向对象的基本概念

--面向对象的基本概念

--面向对象的基本概念 测试题

-程序的开发过程

--程序的开发过程

--程序的开发过程 测试题

-信息的表示和储存

--计算机中的信息与存储单位

--计算机的数字系统

--数据的编码表示

--信息的表示和储存 测试题

-实验指导

--实验一:VS开发环境介绍

第2章 C++简单程序设计(一)

-导学

--第二章导学

-C++语言概述

--C++的特点和程序实例

--C++字符集和词法记号

--C++语言概述 测试题

-基本数据类型、常量、变量

--基本数据类型、常量、变量

--程序举例

--基本数据类型、常量、变量 测试题

-运算与表达式

--算术运算与赋值运算

--逗号运算、关系运算、逻辑运算和条件运算

--Sizeof运算、位运算

--运算优先级、类型转换

--运算与表达式 测试题

-实验二:简单程序设计(上)

--实验二:简单程序设计(上)

第2章 C++简单程序设计(二)

-数据的输入和输出

--数据的输入和输出

--数据的输入和输出 测试题

-选择结构

--if语句

--switch语句

--选择结构 测试题

-循环结构

--循环结构——while语句

--do-while语句

--for语句

--嵌套的控制结构、其他控制语句

--循环结构 测试题

-自定义类型

--自定义类型

--自定义类型

-第2章小结

--第二章小结

-实验二:C++简单程序设计(下)

--实验二C++简单程序设计(下)

第3章 函数

-导学

--导学

-函数定义

--函数定义

--函数定义 测试题

-函数调用

--函数调用(例3-1)

--例3-2

--例3-3

--例3-4

--例3-5

--例3-6

--函数调用 测试题

-嵌套与递归

--函数的嵌套调用(例3-7)

--函数的递归调用(例3-8)

--例3-9

--例3-10

--嵌套与递归 测试题

-函数的参数传递

--函数的参数传递

--函数的参数传递 测试题

-引用类型

--引用类型(例3-11)

--引用类型 测试题

-含有可变参数的函数

--含有可变参数的函数

--含有可变参数的函数 测试题

-内联函数

--内联函数(例3-14)

--内联函数 测试题

-constexpr函数

--constexpr函数

--CONSTEXPR函数课后习题

-带默认参数值的函数

--带默认参数值的函数

--默认参数值例(3-15)

--带默认参数值的函数 测试题

-函数重载

--函数重载(例3-16)

--函数重载 测试题

-C++系统函数

--C++系统函数(例3-17)

--C++系统函数习题

-第3章小结

--第三章小结

-实验三(上)函数的应用

--实验三(上)函数的应用

-实验三(下)函数的应用

--实验三(下)函数的应用

第4章 类与对象

-导学

--导学

-面向对象程序的基本特点

--面向对象程序的基本特点

--面向对象程序的基本特点 测试题

-类和对象

--类和对象的定义

--类和对象的程序举例

--类和对象 测试题

-构造函数

--构造函数基本概念

--构造函数例题(1)——例4-1

--构造函数例题(2)——例4-2

--委托构造函数

--复制构造函数

--复制构造函数调用举例

--构造函数 测试题

-析构函数

--析构函数

--析构函数 测试题

-类的组合

--类的组合

--类的组合程序举例

--前向引用声明

--类的组合 测试题

-UML简介

--UML简介

--UML简介课后习题

-结构体与联合体

--结构体(例4-7)

--联合体(例4-8)

--结构体与联合体 测试题

-枚举类

--枚举类

--枚举类 测试题

-第4章小结

--第四章小结

-实验四(上)

--实验四(上)

-实验四(下)

--实验四(下)

第5章 数据的共享与保护

-导学

--导学

-标识符的作用域与可见性

--标识符的作用域与可见性

--标识符的作用域与可见性 测试题

-对象的生存期

--对象的生存期

--对象的生存期 测试题

-类的静态成员

--静态数据成员(例5-4)

--静态函数成员(例5-5)

--类的静态成员 测试题

-类的友元

--类的友元(例5-6)

--类的友元 测试题

-共享数据的保护

--共享数据的保护(例5-7)

--共享数据的保护 测试题

-多文件结构和预编译命令

--多文件结构和预编译命令(例5-10)

--多文件结构和预编译命令 测试题

-第5章小结

--小结

-实验五

--实验五

第6章 数组、指针与字符串(一)

-导学

--导学

-数组的定义与初始化

--数组的定义与使用

--数组的储存与初始化

--一维数组应用举例

--数组的定义与初始化 测试题

-数组作为函数的参数

--数组作为函数参数(例6-2)

--数组作为函数的参数 测试题

-对象数组

--对象数组

--对象数组 测试题

-基于范围的for循环

--基于范围的for循环

-指针的定义和运算

--指针的概念、定义和指针运算

--指针的初始化和赋值

--指针的算术运算、关系运算

--指针的定义和运算 测试题

-综合实例

--综合实例

-实验六(上)

--实验六上

第6章 数组、指针与字符串(二)

-指针与数组

--用指针访问数组元素

--指针数组

--指针与数组 测试题

-指针与函数

--以指针作为函数参数

--指针类型的函数

--指向函数的指针

--指针与函数 测试题

-对象指针

--对象指针

--对象指针 测试题

-动态内存分配

--动态分配与释放内存

--申请和释放动态数组(一)

--申请和释放动态数组(二)

--动态内存分配 测试题

-智能指针

--智能指针

-vector对象

--vector对象

--vector对象 测试题

-对象复制与移动

--深层复制与浅层复制

--移动构造

--对象复制与移动 测试题

-字符串

--C风格字符串

--string类

--字符串 测试题

-第6章小结

--第六章小结

-综合实例

--综合实例

-实验六(下)

--实验六(下)

例3-4笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。