本文是通过例子学习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. 手写call,apply方法实现

    call Function.prototype.myCall = function(){ var object = arguments[0]; var arr = []; for(var i = 1; ...

  2. css3鼠标移动图片上移效果

    css3的功能真是很强大,学无止境,不多说,直接上代码 css部分: <style> ;;} .text-center{text-align:center} .col_cont{width ...

  3. call,apply,bind详解

    为什么要改变this指向? 我们知道bind,call,apply的作用都是用来改变this指向的,那为什么要改变this指向呢?请看下面的例子: var name="lucy"; ...

  4. 精选Pycharm里6大神器插件

    http://www.sohu.com/a/306693644_752099 上次写了一篇关于Sublime的精品插件推荐,有小伙伴提议再来一篇Pycharm的主题.相比Sublime,Pycharm ...

  5. JPA 一对多、多对一注解

    1. @OneToMany @OneToMany 是属性或方法级别的注解,用于定义源实体与目标实体是一对多的关系. 参数 类型 描述 targetEntity Class 源实体关联的目标实体类型,默 ...

  6. Date和Calendar

    处理日期,时间: 大部分的方法已过时,不推荐使用,但是你使用过时的方法也不会报错. Date() 分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒). Date(long date) ...

  7. H5 操作class 类样式

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. linux设备编号的内部表示

    在内核中, dev_t 类型(在 <linux/types.h>中定义)用来持有设备编号 -- 主次部分都包 括. 对于 2.6.0 内核, dev_t 是 32 位的量, 12 位用作主 ...

  9. laravel怎么开启调试模式

      在.env文件里有个APP_DEBUG=true,如果是false,改成true就好了.

  10. H3C IPv6地址构成