编程-求最大公约数的c++源代码,要用我的方法,但是运行不了,请看看我的方法对不,

问题描述

求最大公约数的c++源代码,要用我的方法,但是运行不了,请看看我的方法对不,

/*第一步:任意给定两个正整数;判断它们是否都是偶数。若是,则用2约简;
若不是则执行第二步。
第二步:以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。
继续这个操作,直到所得的减数和差相等为止。
则第一步中约掉的若干个2与第二步中等数的乘积就是所求的最大公约数。*/
#include //用更相减损术计算最大公约数

#include
using namespace std;

int main (void)
{
int a;
int b;
int max;
int n=1;

printf("a=");
scanf ("%d",&a);
printf("b=");
scanf ("%d",&b);
for( n=2;a%2==0 && b%2==0;n+=2)
{

a=a/2;
b=b/2;

}
if (a<b)
{
max=b;
b=a;
a=max;

}
while(a!=b)
{
int c;
c=a-b;

a=b;
b=c;

}
printf ("最大公约数=%d",a*n);

return 0;
}

解决方案

 int main (void)
{
int a;
int b;
int max;
int n=1;
printf("a=");
scanf ("%d",&a);
printf("b=");
scanf ("%d",&b);
for(;a%2==0 && b%2==0;n*=2)//这里n是前面2的乘机,不是2的和
{
a=a/2;
b=b/2;
}
if (a<b)
{
max=b;
b=a;
a=max;

}
while(a!=b)
{
    int c;
    c=a-b;
    if(b>c){//需要判断B和C的大小再做减法
       a=b;
       b=c;
    }else{
       a=c;
    }
}
printf ("最大公约数=%d",a*n);
return 0;
}

解决方案二:

1.for( n=2;a%2==0 && b%2==0;n+=2),一开始就赋了n=2,如果两都是奇数,到最后还得乘个2,不对,这里不应赋值2
2.for( n=2;a%2==0 && b%2==0;n+=2),n每次变化是乘以2,不是加上2
3.while(a!=b){int c; c=a-b; a=b; b=c;}本来就是令a>b,c=a-b才能大于0,若a=5,b=2,c=a-b=3,则不能把b赋给a,c赋给b,而要判断c,b谁大谁小

解决方案三:

int main (void)
{
int a;
int b;
int max;
int n=1;
printf("a=");
scanf ("%d",&a);
printf("b=");
scanf ("%d",&b);
for(;a%2==0 && b%2==0;n*=2)//这里n是前面2的乘机,不是2的和
{
a=a/2;
b=b/2;
}
if (a<b)
{
max=b;
b=a;
a=max;

}
while(a!=b)
{
int c;
c=a-b;
if(b>c){//需要判断B和C的大小再做减法
a=b;
b=c;
}else{
a=c;
}
}
printf ("最大公约数=%d",a*n);
return 0;
}

时间: 2024-09-17 04:45:13

编程-求最大公约数的c++源代码,要用我的方法,但是运行不了,请看看我的方法对不,的相关文章

C#求最大公约数

最大公约数既能被两个整数整除的最大整数,例如,24与15两个数的最大公约数为3.求最大公约数可以求余法实现.即用两个数中最大的数除以最小的数求余,然后使用除数除以余数求余,直到余数为0时,之前的除数也就是两个数的最大公约数.计算最大公约数的算法如下: public float maxGongYueShu(int n1,int n2){ int temp = Math.Max(n1, n2); n2 = Math.Min(n1, n2);//n2中存放两个数中最小的 n1 = temp;//n1中

Python实现求最大公约数及判断素数的方法

  本文实例讲述了Python实现求最大公约数及判断素数的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 #!/usr/bin/env python def showMaxFactor(num): count = num / 2 while count > 1: if num % count == 0: print 'largest factor of %d is %d' % (num, count) break #break跳出时会跳出

c++-如何编程求随机事件的期望,有没有 快捷点 的方法

问题描述 如何编程求随机事件的期望,有没有 快捷点 的方法 遇到的问题如下:猴子排序法是计算机科学中的一个著名的随机算法:对于n个数,每次随机一个1..n的排列,按此排列将这n个数重排,直到这n个数有序为止.这个算法期望需要产生n!个排列才能将数列排好序,现在给出了一个改进版的猴子排序算法:假设a[1] a[2] .. a[n] 是1..n的一个排列,每次随机选择三个不同的位置 1 <= i < j < k <= n,随机交换 a[i],a[j],a[k](从六种等可能的情况中等概

算法 c c++-求最大公约数和判断素数的最优算法

问题描述 求最大公约数和判断素数的最优算法 要求时间限制在1s之内的,测试数据最大到10的5次方,算法思想或者程序代码(C++或c) 解决方案 判断素数只需要把除数从2变到n的平方根就行了,最大公约数也就一样了

求一个围棋程序的源代码

问题描述 求一个围棋程序的源代码 1.可以判断输赢2.可以模拟对弈急求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求求 解决方案 http://www.cnblogs.com/qswang/archive/2012/12/15/2818870.html 解决方案二: 额...你是要什么源代码?C++还是java?是网络围棋程序还是本

求径向道变换的源代码

问题描述 求径向道变换的源代码 用MATLAB实现对单一信号(雷克子波)进行变换,得到变换前后在频域的波形对比图.

冒泡排序算法 递归算法,求n的阶乘 求最大公约数和最小公倍数 java分解质因数

   1.  /**     2.  * 冒泡排序算法     3.  */      4. public class BubbleSort {      5.     public static void sort(int[] values) {      6.         int temp;      7.         for (int i = 0; i < values.length; ++i) {      8.             for (int j = 0; j <

更相损减法和辗转相除法 求最大公约数和最小公倍数(C语言)

假设有两个数a和b,求a,b的最大公约数和最小公倍数实际上是一个问题,得出这两个数的最大公约数就可以算出它们的最小公倍数. 最小公倍数的公式是 a*b/m m为最大公约数 因为 a=m*i; b=m*j; 最小公倍数为 m*i*j 那么,下面就开始计算a和b的最大公约数. 更相损减法: <九章算術·方田>作分數約簡時,提到求最大公因數方法:反覆把兩數的較大者減去較小者,直至兩數相等,這數就是最大公因數.這方法除了把除法換作減法外,與輾轉相除法完全相同.例如書中求91和49的最大公因數: 91

汇编设计-汇编语言子程序编程求代码

问题描述 汇编语言子程序编程求代码 目的:掌握子程序的定义指令 字符分类存储并统计每种字符个数COUNT-CHAR;程序接收用户键入的一行字符(字符个数不超过80个,该字符串用回车符结束),并按字母.数字.及其他字符分类计数,然后将结果存入以letter,digit和other为名的存储单元中,其中第一个单元存放该类字符个数,从第二单元开始存放分类的字符. 提示:程序可采用0AH功能调用把键入字符直接送到缓冲区,然后逐个取出分类计数.也可采用01H功能调用在接收字符后先分类计数然后再存入缓冲区.