首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

小弟我这个求最大公约数的算法错在哪儿了

2012-08-15 
我这个求最大公约数的算法错在哪儿了#include stdio.h#include stdlib.hint main(void) {int m, n, r

我这个求最大公约数的算法错在哪儿了
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int m, n, r;
int s,i,j=0;
int *a=(int*)malloc(i*sizeof(int));
printf("输入两数:");
scanf("%d %d", &m, &n);
if(m>n)
{
r=n/2+1;
for( i=0;r>0;i++)
{

if(n%r==0)
a[i]=r;
r--;
}
}
while(m%a[j]!=0)
j++;
printf("%d",a[j]);

return 0;
}


[解决办法]
int *a=(int*)malloc(i*sizeof(int));//这时候的i是多少?
[解决办法]

C/C++ code
int gcd(int a,int b){    int tmp;    if (a<b)    {        tmp = a;        a = b;        b = tmp;    }    while(b!=0)    {        tmp = a;        a = b;        b = tmp%b;    }    return a;}
[解决办法]
C/C++ code
#include <stdio.h>#include <stdlib.h>int main(void) {    int m, n, r;    int s=10,i,j=0;/***************************    int *a=(int*)malloc(i*sizeof(int));//i的值未知****************************/    int *a=(int*)malloc(s*sizeof(int));    printf("输入两数:");    scanf("%d %d", &m, &n);    //最后n>m    if(m>n)    {        int temp;        temp=n;        n=m;        m=temp;    }    printf("%d    %d\n",m,n);    r=n/2+1;    //找出能被n整除的所有数字    for( i=0;r>0;i++)    {        if(n%r==0)        {                a[i]=r;            if (m % a[i]==0)            {                    printf("%d",*(a+i));                return 1;            }        }        r--;    }    /****************    //a所指向的空间没有初始化,这样的计算有问题    while(m%a[j]!=0)        j++;    printf("%d",a[j]);    *******************/    free(a);        return 0;}
[解决办法]
探讨

搜下辗转相除法

[解决办法]
最好的办法是 辗转相减法

热点排行