【编程小题目5】求解最大公约数和最大公倍数

题目:输入两个正整数m和n,求其最大公约数和最小公倍数。

程序分析:利用辗除法求最大公约数;最大公倍数等于m * n / Gcd(m,n)。

#include <iostream>

using namespace std;

int main()

{

  int n, m;

  int k,r = 1;

  cout << "Plese input the number n and m:";

  cin >> n >> m;

  k = n * m;

  while(r)

  {

    r = n % m;

    n = m;

    m = r;

  }

  cout << "最大公约数是:" << n << endl;

  cout << "最大公倍数是:" << k / n << endl;

  return 0;

}

时间: 2024-10-07 20:32:53

【编程小题目5】求解最大公约数和最大公倍数的相关文章

【编程小题目8】求解完数

题目:一个数如果恰好等于它的因子之和,这个数就称为"完数".例如6=1+2+3.编程 找出100以内的所有完数. 分析:本质还是求质因数. #include <iostream> using namespace std; bool IsPerfect(int n){ int i, j = 0; int Temp = n,Sum = 1; int arr[100] = {'0'}; for(i = 2; i <= n; i++) { if(i == n) { arr[j

【编程小题目1】求解斐波拉契数列问题

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21.... 斐波那契数列又因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”.Fibonacci 数列定义:n = 1,2 时,fib(n) = 1n > 2 时,fib(n) = fib(n-2) + fib(n-1) // 递归算法求解Fibonacci 数列 #i

【编程小题目2】求解素数

题目:判断101-200之间有多少个素数,并输出所有素数. 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数. //连续整除法求解素数 #include <iostream> #include <cmath> #include <iomanip> using namespace std; int main() { int i, j, count = 0; for(i = 101; i <= 200;

【编程小题目3】求解水仙花数

题目:打印出100 - 999 之间所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身.例如: 153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方. 程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位. #include <iostream> #include <iomanip> using namespace std; int main() {

【编程小题目4】求解质因数

题目:将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5. 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可. (2)如果n != k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步. (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步. #include <iostream> using namespace std; int

【编程小题目6】字符数统计

题目:输入一行字符,分别统计出其中英文字母.空格.数字和其它字符的个数. #include <iostream>#include <string>using namespace std; int main(){ const int size = 100; char ch[size]; int CharNum = 0, DigNum = 0, NullNum = 0, OtherNum = 0;  for(int i = 0; i < size; i++) { ch[i] =

【编程小题目7】求s=a+aa+aaa+aaaa+aa...a的值

题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字.例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制 #include <iostream>#include <string>using namespace std; long Function(int number, int n){ if(n == 1) { return number; } else { return Function(number ,n - 1) *

Java编程用栈来求解汉诺塔问题的代码实例(非递归)_java - JAVA

文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 [题目] 汉诺塔问题比较经典,这里修改一下游戏规则:现在限制不能从最左侧的塔直接移动到最右侧,也不能从最右侧直接移动到最左侧,而是必须经过中间.求当塔有N层的时候,打印最优移动过程和最优移动总步数. [解答] 上一篇用的是递归的方法解决这个问题,这里我们用栈来模拟汉诺塔的三个塔,也就是不用递归的方法 原理是这样的:修改后的汉诺塔问题不能让任何塔从左直接移动到右,也不能从右直接移动到左,而是要经过中间,也就是说,实际上

关于递归的理解及递归表达式复杂度分析(以求解最大公约数为例)

一,递归的四大基本法则: ①基准情形 基准情形是指那些不需要递归(不需要经过函数调用)之后就能退出的情况.它保证了递归的结束. ②不断推进 每一次递归之后,都要向着基准情形靠近,并且在靠近的过程中问题的规模越来越小. ③设计法则 书上说是:假设所有的递归调用都能运行-----“不是特别理解” ④合成效益法则 不要在不同的递归调用中做重复的工作. 二,实例 求解最大公约数--采用欧几里德算法 1 public static int gcd_recursive(int m, int n){ 2 if