当前位置: 代码迷 >> C语言 >> 帮我修改程序
  详细解决方案

帮我修改程序

热度:271   发布时间:2005-01-07 11:50:00.0
帮我修改程序
小妹学C已两周有余,可是发现自己写的程序总比别人长,望大哥哥大姐姐们帮我修改此程序后再帮我优化一下,谢谢啦

输入两个正整数m和n,求其最大公约数和最小公倍数。
main()
{
int m,n,t1,t2,k,a=0;
scanf("%d%d",&m,&n);
for(k=2,k<=(m>n?n:m),k++)
{t1=m%k; t2=n%k;
  if(t1==0&&t2==0) a=k;
}
if(a=0) printf("m和n没有公约数");
else print("m和n的最大公约数为:%d\n",a);
for(k=1,,k++)
{ t1=(k*m)%n;
   if(t1==0)
    { a=k*m;
     break;
    }
  }
  printf("m和n的最小公倍数为:%d\n",a);
}

[此贴子已经被作者于2005-1-7 11:52:32编辑过]



----------------解决方案--------------------------------------------------------
不要求一定做到最好,只要求尽量做到最好。

程序存在错误,for 语句的语法有错,除此之外,我觉得程序按预期结果实现了就挺好的了,没有必要非简不可。
----------------解决方案--------------------------------------------------------
非常感谢,呵呵
----------------解决方案--------------------------------------------------------

#include<stdio.h>

int CommonDivisor(int m, int n) /*公约数*/ { if(n==0) return -1; /*0 错*/ if(m%n == 0) return n; else { return CommonDivisor(n, m%n); } }

void main() { int i,j,t; scanf("%d,%d",&i,&j); /*逗号隔开输入*/ t=CommonDivisor(i, j); printf("CommonDivisor: %d\nCommonMultiple: %d\n",t,(i*j)/t); }

[此贴子已经被作者于2005-1-9 2:30:42编辑过]


----------------解决方案--------------------------------------------------------
回复:(idealistic33)#includeint...
以下是引用idealistic33在2005-1-9 2:23:41的发言:

#include<stdio.h>

int CommonDivisor(int m, int n) /*公约数*/ { if(n==0) return -1; /*0 错*/ if(m%n == 0) return n; else { return CommonDivisor(n, m%n); } }

void main() { int i,j,t; scanf("%d,%d",&i,&j); /*逗号隔开输入*/ if(i>j) { t=CommonDivisor(i, j); } else { t=CommonDivisor(j, i); } printf("CommonDivisor: %d\nCommonMultiple: %d\n",t,(i*j)/t); }

[此贴子已经被作者于2005-1-10 21:47:25编辑过]


----------------解决方案--------------------------------------------------------
if(i>j) { t=CommonDivisor(i, j); } else { t=CommonDivisor(j, i); } 楼上真是 画蛇添足,多此一举。哈哈

[此贴子已经被作者于2005-1-11 22:13:55编辑过]


----------------解决方案--------------------------------------------------------
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
void main(){
int j;
int m,n;
int t1,t2,k;
int a,b;
a=b=0;
printf("Please input two numbers:\n");
scanf("%d%d",&amp;m,&amp;n);
j=(m&gt;n)? m:n;
for(k=2;k&lt;=j;k++){
  t1=m%k; t2=n%k;
  if(t1==0&amp;&amp;t2==0) a=k;
  break;
  }
if(a==0) printf("m和n没有公约数为\n");
else printf("m和n的最大公约数为:%d\n",a);
for(k=1;k&lt;=n;k++){
  t1=(k*m)%n;
  if(t1==0){
   b=k*m;
   break;
  }
}
  printf("m和n的最小公倍数为:%d\n",b);
}
我稍微修改了一下就得到正确结果了!
刚学两周就写这样,真的很佩服了!:)
要是注意一下一些语句的格式会更棒的!
----------------解决方案--------------------------------------------------------
main()
{
int m,n,p,r,g;
scanf("%d,%d",&amp;n,&amp;m);
p=m*n;
while(n!=0)
{
r=m%n;
m=n;
n=r;
}
g=p/m;
printf("%d,%d",m,g) ;
}
----------------解决方案--------------------------------------------------------
  相关解决方案