我这个求最大公约数的算法错在哪儿了
#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是多少?
[解决办法]
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;}
[解决办法]
#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;}
[解决办法]