求两个数最大公约数
2015-10-29 19:28
573 查看
题目:
写一个程序,求两个正数的最大公约数。如1100100210001,120200021,求其最大公约数
分析:设两个数分别为x,y
求其最大公约数f(x,y),如果有x%2==0而y%2不等于0,那么可以
约简为f(x/2,y),同样道理适用于y
如果x与y都是偶数,那么最大公约数可以为f(x/2,y/2)*2
如果x与y都是奇数,那么最大公约数可以为f(y,x-y)
直到上述x-y为0,即为最大公约数
写一个程序,求两个正数的最大公约数。如1100100210001,120200021,求其最大公约数
分析:设两个数分别为x,y
求其最大公约数f(x,y),如果有x%2==0而y%2不等于0,那么可以
约简为f(x/2,y),同样道理适用于y
如果x与y都是偶数,那么最大公约数可以为f(x/2,y/2)*2
如果x与y都是奇数,那么最大公约数可以为f(y,x-y)
直到上述x-y为0,即为最大公约数
#include<iostream> using namespace std; //判断一个数是否偶数 int isEven(int x) { return (x % 2 == 0)? 1 : 0; } int maxCommonDivisor(int x, int y) { //如果x<y交换下位置 if (x < y) return maxCommonDivisor(y, x); else if (y == 0) return x; else { //如果x是偶数,y不是偶数 if (isEven(x)) { //如果x是偶数y也是偶数,x和y都除2 if (isEven(y)) return (maxCommonDivisor(x >> 1, y >> 1) << 1); //如果y不是偶数,则只有x除2 else return maxCommonDivisor(x >> 1, y ); } else { //如果y是偶数,则只有y除2 if (isEven(y)) return maxCommonDivisor(x, y >> 1); //如果x和y都不是偶数,则相减 else return maxCommonDivisor(y, x - y); } } } int main() { int x = 30, y = 42; int commonDivisor = maxCommonDivisor(x, y); cout << commonDivisor << endl; system("pause"); return 0; }
相关文章推荐
- SPDY 是什么?如何部署 SPDY?
- 重定向和请求转发的区别
- IOS的APP结构、生命周期、main
- 装系统
- 更快学习 JavaScript 的 6 个思维技巧
- ArcEngine栅格和矢量渲染(含可视化颜色带)
- SQL 编码规范
- 经典SQL语句大全
- 从标准输入读取几行输入,每行输入都要打印到标准输出上,前面加上行号
- 原码, 反码, 补码 详解
- multithreading--演示中断线程Thread的异常
- 学习笔记二
- 支付宝的应用+代码
- MetaQ 实例之四
- 时间换算
- 学习笔记一
- 寄存器某一位置位或者清零
- 高精度_加法
- 网站开发进阶(八)tomcat异常日志分析及处理
- 如何使用multipart/form-data格式上传文件