c语言编程求帮改错

1、编写一个函数hef()求最大公约数,编写一个函数led()求最小公倍数,但计算结果不由函数带回,而是赋值给全局变量。
2、测试数据有多组,每组单独占一行,包含两个正整数,中间由空格分隔开。
3、对于每组测试数据,输出结果占一行,包括两个正整数,分别是最大公约数和最小公倍数。

这道题我做出来了,但是网上测试说时间超限了,哪位大神能帮我改改么?0.0
#include<stdio.h>
int p,q;void hef(int x,int y);void led(int x,int y);int main(){int a,b,m,n;while(scanf("%d%d",&a,&b)!=EOF){hef(a,b);led(a,b);m=p;n=q;printf("%d %d\n",m,n);}return 0;}void hef(int x,int y){int i;p=0;for(i=1;i<=x&&i<=y;i++){if(x%i==0&&y%i==0) p=i;}}void led(int x,int y){int j;if(x>y) j=x;else j=y;while(j%x!=0||j%y!=0) {j++;}q=j;}

求最大公约数和最小公倍数都是有技巧的,单纯的 i+1 方式去找必定慢

void hef(int x, int y)
{
    int i = x > y ? y : x;
    if(x % i == 0 && y % i == 0)
        p = i;
    else
    {
        for(i = i / 2; i > 0; i--)
        {
            if(x % i == 0 && y % i == 0)
            {
                p = i;
                break;
            }
        }
    }
}

void led(int x, int y)
{
    int max = x > y ? x : y;
    int min = x > y ? y : x;
    int j = 1;
    while((max * j) % min != 0)
    {
        j++;
    }
    q = max * j;
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-12-14
#include<stdio.h>

int gcd(int x,int y)
{
return y==0?x:gcd(y,x%y);
}

int main()
{
int a,b,m;
while(scanf("%d%d",&a,&b)!=EOF)
{
m=gcd(a,b);
printf("%d %d\n",m,a*b/m);
}
return 0;
}追问

这个没有用全局变量啊。。

追答

= =那就不要用函数了,用全局变量做最大公约数,我觉得这题目很萨比。

#include

int main()
{
int a,b,m,n;
while(scanf("%d%d",&a,&b)!=EOF)
{
m=a;
n=b;
while(n!=0)
{
int t=m%n;
m=n;
n=t;
}
printf("%d %d\n",m,a*b/m);
}
return 0;
}

C语言 输入一数组求最大 最小 方差 求改错...求帮助啊
在编程时,确保数据类型的一致性是非常重要的,这能避免不必要的计算错误。在您的代码中,首先注意到的一点是,定义精度数据时应保持一致。如果在计算过程中使用了不同精度的数据类型,可能会导致精度损失或错误的结果。其次,您提到的s没有初始化。在C语言中,未初始化的变量可能包含任意值,这在进行计...

C语言编程上机竞赛问题“帮文文改改错”
\/ 源字符串 :he_weifepanng 拼写错误的串 :pann 替换为 :n 替换后的结果 : he_weifeng Press any key to continue \/ include <stdio.h>#include <stdlib.h>#include <string.h>\/* 字符串替换(源字符串, 旧字符串, 新字符串) *\/char *strReplace(char *src, const char *oldstr, co...

C语言代码改错!求助
回答:#include<stdio.h> int main ( ) { char str[2][20]; char string[20]; int i; for(i=0;i<2;i++) scanf("%s",str[i]); if(strcmp(str[0],str[1])) strcpy(string,str[0]); else strcpy(string,str[1]); printf("\\nthe largest:\\n%s\\n",string); return 0...

c语言程序改错,速求高手高奖励,代码如下,我觉得错误是字符串的值Z付...
test.c:3:14: 错误: ‘y1’被重新声明为不同意义的符号 可以判断y0和y1已经被定义了,猜测是math.h,也算是情理之中。所以要改个名。用文本工具替换y0为y01,替换y1为y02,再编译:undefined reference to `getch'哦,linux下面只有getchar(),加上之后,编译通过。程序执行:the best result:...

大神求c语言代码改错TAT
printf("a[%d]=%c\\t",i,a[i]); \/\/原来是n改成i } } else printf("1");printf("\\n");system("pause");return 0;} void zfc(int x,char *y){ int i=0;while(x){ y[i]=x%10+48;x\/=10;i++;} y[i]=0;strrev(y);} void jia(char *a,char *b,char *c){ ...

C语言求改错
一、denominator=denominator+3 (- -||| 这也太粗心了吧)二、错在判断while()上,当item为负数,如-1\/4时就退出循环了。可以考虑加个if判断 while(1.0*item>=eps){ item=flag*1.0\/denominator;flag=-flag;s=s+item;denominator=denominator+3;if(item<0) \/\/加这两句,相当于把负数变...

c语言编程求派的近似值,改错题。应该结果是3.14159的可是运行出来都是2....
double fact(int n);double multi(int n);int main(void){ int i;double sum, item=10; \/\/ 初始时为item赋一个较大的值,不然第一次循环就是非法使用item sum = 1;for(i = 1;item >= 1e-6; i++){ item = fact(i) \/ multi(2*i+1);sum = sum + item;} printf("PI=%0...

C语言 :三个数求最大值,快来帮忙改错哈!
(1)include <stdio.h>int main(){scanf("%d%d%d",&a,&b,&c); max = a>b ? a : b; \/\/此处建议改为max =( a>b ? a : b );第一方便阅读,第二不容易出现逻辑错误,解释为:max在a>b成立时a对其赋值,否则b对其赋值,建议规范。)max = max>c ? max : c printf("...

c语言 改错
c语言 改错 #include<stdio.h>#include<math.h>#include<stdlib.h>#definePI3.1415926#definetPI\/180voidmain(){floata0=85,b0=23,m=0.588792,n=1.813319,l=2.398730;floatA,B,C,s,j,k1,k2,k;flo... #include<stdio.h>#include<math.h>#include<stdlib.h>#define PI 3.1415926#define t PI\/180void...

C语言编写程序求小学算术题,求大神帮改错
int max,min,op=0;char a;max=0;min=9;a=getchar();while(a!='='){{if(a<='9'&&a>='0'){if((a-'0')>=max) max=a-'0';if((a-'0')<=min) min=a-'0';} else if(a==',') continue;else if(a=='+') op=1;else if(a=='-') op=2;else if(a=='*')...

相似回答