本文是通过例子学习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. 理解和实现分布式TensorFlow集群完整教程

    手把手教你搭建分布式集群,进入生产环境的TensorFlow 分布式TensorFlow简介 前一篇<分布式TensorFlow集群local server使用详解>我们介绍了分布式Ten ...

  2. Centos下添加用户到用户组

    将一个用户添加到用户组中,千万不能直接用: usermod -G groupA 这样做会使你离开其他用户组,仅仅做为 这个用户组 groupA 的成员. 应该用 加上 -a 选项: usermod - ...

  3. 在vuex的mutations中使用vue的小技巧

    问题: 在vuex组件中的mutations属性中的定义的函数,有时会要用到vue这个对象.正常在其他的地方使用是通过this这个变量来获取,但是在mutations定义的函数中this指定的是Vue ...

  4. Native memory allocation (mmap) failed to map 142606336 bytes for committing reserved memory.

    这里写链接内容 问题描述 Java程序运行过程中抛出java.lang.OutOfMemoryError: unable to create new native thread,如下所示: [java ...

  5. Vue 用第三方的库去实现动画效果

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

  6. 解决:javac: 无效的目标发行版: 1.8

    原 解决:javac: 无效的目标发行版: 1.8 2017年06月14日 16:21:12 代码也文艺 阅读数 44795 版权声明:本文为博主原创文章,未经博主允许不得转载. https://bl ...

  7. 【9001】Internet消息发布

    Time Limit: 1 second Memory Limit: 256 MB 问题描述 设Internet上有N个站点,通常从一个站点发送消息给其他N-1个站点,需依次发送N-1次.这样从一个站 ...

  8. H3C IP地址动态获取过程

  9. asp dotnet core 支持客户端上传文件

    本文告诉大家如何在 asp dotnet core 支持客户端上传文件 新建一个 asp dotnet core 程序,创建一个新的类,用于给客户端上传文件的信息 public class Kanaj ...

  10. <Codeforce>1082A. Vasya and Book

    题目描述: Vasya is reading a e-book. The file of the book consists of nn pages, numbered from 11 to nn. ...