新手刷题C语言遇到想不明白的地方,恳求赐教!

woshilzh0 2018-08-01 09:29:19
题目是这样的:输入两个正整数m和n,求其最大公约数和最小公倍数。
例如输入:5 7
输出:1 35

我自己试着写了些发现莫名其妙会不出结果,就比如输入5 7,不知道哪里错了,编译也没啥问题
求dalao指点迷津,Thanks (・ω・)


#include<stdio.h>
int main()
{
int da,xiao,m,n,i,j,zdgys,zxgbs;
scanf("%d%d",&m,&n);
da = (m>n) ? m : n;
xiao=(m<n) ? m : n;
for (i=xiao;i%xiao!=0||da%i!=0;i--){}
zdgys=i;
for (j=1;(j*da)%xiao!=0;j++){}
zxgbs=j*da;
printf("%d\n%d",zdgys,zxgbs);
return 0;
}
...全文
305 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
shenyulingyeye 2018-08-04
  • 打赏
  • 举报
回复
#include<stdio.h>
int main()
{
int n,m,a,b,r;
while(scanf("%d%d",&n,&m)!=EOF)
{
a=m;
b=n;
while((r=n%m)!=0)
{
n=m;
m=r;
}
printf("gc=%d,gb=%d\n",m,a*b/m);//gc最大公约,gb最小公倍
}
return 0;
}
shenyulingyeye 2018-08-04
  • 打赏
  • 举报
回复
#include<stdio.h>
int main()
{
int n,m,a,b,r;
while(scanf("%d%d",&n,&m)!=EOF)
{
a=m;
b=n;
while((r=n%m)!=0)
{
n=m;
m=r;
}
printf("gc=%d,gb=%d\n",m,a*b/m);//gc最大公约,gb最小公倍,gc*gb=m*n
}
return 0;
}
_肆 2018-08-02
  • 打赏
  • 举报
回复
楼上正解,首先for(){ },for循环执行大括号的东西,当大括号只有一句话时,可以省略大括号,所以你这个等于循环里面没写东西,然后i%xiao!=0||da%i!=0因为是或的关系,所以会执行到 整数%0的情况,0是不能做被除数的,所以程序会崩溃

你这斜着写代码的排版我也是第一次见
半雨微凉丶 2018-08-02
  • 打赏
  • 举报
回复
#include<stdio.h>
int main()
{
int a,b,i,j;//i最大公约数,j最小公倍数
scanf("%d %d",&a,&b);
for (i=(a>b?a:b);i>0;i--){
if (a%i==0&&b%i==0){
j=a*b/i;
printf("%d %d\n",i,j);
break;
}
}
return 0;
}


写代码之前先思考一下,有时候不仅仅是实现,逻辑更重要,这样才能有所提高。
woshilzh0 2018-08-02
  • 打赏
  • 举报
回复
一楼说的第一条,确实是我自己大意了,只把这一处改过来就可以运行处正确结果了。for后面{}我是故意这样的,因为只用循环控制i,j
你的循环那样
zdgys=i;
zdgys=i;for循环内出现,循环外再出现一次,就是解决了i- -的问题,我用笔写了几个数才弄明白,当时还纳闷同样的语句出现两遍。


2楼的话,0是没关系哒,题目要正整数,不过确实程序不够健壮
话说,排版当时没觉得打了很多空格,咋还斜的这么厉害呢……其实也不知道怎么算是良好的代码风格,书上的要么就是板板正正一行一行的排下来,要么就是很短小的程序段,那……怎么才算良好的程序风格呢?
黄某人 2018-08-01
  • 打赏
  • 举报
回复
#include<stdio.h>
int main()
{
int da,xiao,m,n,i,j,zdgys,zxgbs;
scanf("%d%d",&m,&n);
da = (m>n) ? m : n;
xiao=(m<n) ? m : n;
for (i=xiao;xiao%i!=0||da%i!=0;i--)//1

zdgys=i;
zdgys=i;//2
for (j=1;(j*da)%xiao!=0;j++)
zxgbs=j*da;
zxgbs=j*da;//3
printf("%d\n%d",zdgys,zxgbs);
return 0;
}
1.首先,应该用xiao%i!=0||da%i!=0来判断了,楼主可能大意写错了
2.循环里的i作用与zdgys是一样的,最后跳出循环的时候还应该再赋值一次
3.同2

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧