本文是通过例子学习C++的第三篇,通过这个例子可以快速入门c++相关的语法。

题目要求:输入两个整数,求其大公约数。

解答方法一:两个数的最大公约数,是这两个数中的小数,或者是这2个数的公约数中的最大数字。

这两个数字用num1和num2存储,min表示其中最小数字。如果num1和num2能同时整除min,则min为起最大公约数,否则min=min-1,重复该循环直到num1和num2能同时整除min。似曾相识?是的,和上一篇求最小公倍数方法差不多。

通过例子学习C++(二)最小公倍数

#include <iostream>
using namespace std;
int main()
{
int num1,num2,min;
cin>>num1>>num2; //求num1和num2中的最小数字
if(num1<num2){
min = num1;
}else{
min = num2;
} while(num1 %min !=0 || num2 %min !=0){
min--;
}
cout<<"数字"<<num1<<"和数字"<<num2<<"的最大公约数为:"<<min;
return 0;
}

通过该例子,可以学习:

  • if-else语句

    为了养成良好的习惯,我在if和else语句的语句体中,都增加了大括号。这样养成习惯后,不会忘记括号而导致的错误。

  • while循环

    同上,尽管while语句的语句体也只有一句,此处也增加了大括号。不能说是非常好的习惯,但可以避免忘记括号导致的错误。

程序运行后效果如下:

上述求最大公约数的方法,执行效率不高。可以改进如下:

解答方法二:两个数的最大公约数,辗转相除法(又叫欧几里得算法)。

#include <iostream>
using namespace std; int main()
{
int num1,num2,r,temp;
cin>>num1>>num2;
cout<<"数字"<<num1<<"和数字"<<num2<<"的最大公约数为:"; //通过temp变量,交换两个数
// if(num1<num2){
// temp = num1;
// num1 = num2;
// num2 = temp;
// } r = num1 % num2;
while(r !=0){
num1 = num2;
num2 = r;
r = num1 % num2;
} cout<<num2;
return 0;
}

通过该例子,可以学习:

  • 交换两个数字

    交换两个数字,此处演示了通过临时变量temp交换两个数。

    还有另外一个方法可以交换两个数字(此处假设num1<num2),至于为什么请自行思考:

    num1 = num2 - num1;
    num2 = num2 - num1;
    num1 = num1 + num2;
  • while循环

  • c++中的注释

    在c++中单行注释用 //

    也可以多行注释 /* */

  • 辗转相除法求最大公约数

    辗转相除法为什么可以求最大公约数?对于该方法,知其然但不知所以然,只能暂时“不求甚解”。需要的的话,可以自行查询相关证明。

程序运行后效果如下:

通过例子学习C++(三)最大公约数,并知其然的更多相关文章

  1. 数百个 HTML5 例子学习 HT 图形组件 – 拓扑图篇

    HT 是啥:Everything you need to create cutting-edge 2D and 3D visualization. 这口号是当年心目中的产品方向,接着就朝这个方向慢慢打 ...

  2. 从零开始学习jQuery (三) 管理jQuery包装集

    本系列文章导航 从零开始学习jQuery (三) 管理jQuery包装集 一.摘要 在使用jQuery选择器获取到jQuery包装集后, 我们需要对其进行操作. 本章首先讲解如何动态的创建元素, 接着 ...

  3. 三、Android学习第三天——Activity的布局初步介绍(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 三.Android学习第三天——Activity的布局初步介绍 今天总结下 ...

  4. Quartz定时任务学习(二)web应用/Quartz定时任务学习(三)属性文件和jar

    web中使用Quartz 1.首先在web.xml文件中加入 如下内容(根据自己情况设定) 在web.xml中添加QuartzInitializerServlet,Quartz为能够在web应用中使用 ...

  5. MyBatis学习 之 三、动态SQL语句

    目录(?)[-] 三动态SQL语句 selectKey 标签 if标签 if where 的条件判断 if set 的更新语句 if trim代替whereset标签 trim代替set choose ...

  6. HTML5 例子学习 HT 图形组件

    HTML5 例子学习 HT 图形组件 HT 是啥:Everything you need to create cutting-edge 2D and 3D visualization. 这口号是当年心 ...

  7. Android Sip学习(三)Android Voip实现

    Android Sip学习(三)Android Voip实现   Android Sip学习(准备知识)SIP 协议完整的呼叫流程 Android Sip学习(一)Android 2.3 APIs S ...

  8. SpringMVC学习手册(三)------EL和JSTL(上)

    1.含义 EL:       Expression Language , 表达式语言 JSTL:   Java Server Pages Standard Tag Library, JSP标准标签库  ...

  9. pytorch例子学习-DATA LOADING AND PROCESSING TUTORIAL

    参考:https://pytorch.org/tutorials/beginner/data_loading_tutorial.html DATA LOADING AND PROCESSING TUT ...

随机推荐

  1. JavaScript 拖曳和居中问题

    今天遇到了一个问题,是这样的,有一个div盒子,实现盒子居中,居中的样式是这样的见下 #box{ width:300px; height:150px; position:absolute; left: ...

  2. 运行项目npm run dev时报错: ~Error: Cannot find module 'webpack-cli/bin/config-yargs', 原因是

    webpack@3.X运行项目npm run dev时报错: ~Error: Cannot find module 'webpack-cli/bin/config-yargs' 我的原因是:  web ...

  3. 关于DOM的一些基础问题

    什么是 DOM? DOM 是一项 W3C (World Wide Web Consortium) 标准,全称是文档对象模型(Document Object Model). DOM 定义了访问文档的标准 ...

  4. H3C PPP MP配置示例二

  5. vue-cil 打包爬坑(解决)

    1.打包成功不报错,但是打开页面啥都没有?  解决:文件位置:config目录下index.js文件更改assetsPublicPath属性:文件里面有两个assetsPublicPath属性,也就是 ...

  6. H3C 根据子网掩码计算子网数

  7. H3C IP地址与子网掩码

  8. tf.squeeze()

    转载自:https://www.cnblogs.com/mdumpling/p/8053376.html 原型 tf.squeeze(input, squeeze_dims=None, name=No ...

  9. Linux 内核接口

    USB 端点被绑在接口中. USB 接口只处理一类 USB 逻辑连接, 例如一个鼠标, 一个键盘, 或者一个音频流. 一些 USB 设备有多个接口, 例如一个 USB 扬声器可能有 2 个接口: 一个 ...

  10. Nutch2.3 编译和安装配置

    Nutch2.3 编译和安装配置 [一].介绍 Nutch 是一个开源Java 实现的搜索引擎.它提供了我们运行自己的搜索引擎所需的全部工具.包括全文搜索和Web爬虫.现在Nutch分为两个版本:1. ...