user-0 提问: 三个数字求最大公约数和最小公倍数，哪里错了？

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 引用 9 楼 SYoooooh 的回复:[quote=引用 7 楼 datoulaile123的回复:]解决了问题的话就结贴吧 怎么给。。。不会第一次发帖子[/quote] https://blog.csdn.net/pfdvnah/article/details/102736418 手机暂时无法结贴

user: user-0
content: 引用 7 楼 datoulaile123的回复:解决了问题的话就结贴吧 怎么给。。。不会第一次发帖子

user: user-2
content: 引用 4 楼 SYoooooh 的回复:[quote=引用 3 楼 datoulaile123的回复:]#include<stdio.h>  int main() {     int  a,b,c;     scanf("%d%d%d",&a,&b,&c);     int n;     if(a>b) {         if(c>a)n=c;         if(c<a)n=a;     }     else {         if(b>c)n=b;         else n=c;     }     do {         if(n%a==0&&n%b==0&&n%c==0) {}         else n++;     } while(n%a!=0||n%b!=0||n%c!=0);     printf("最小公倍数%d",n);     if(a>b) {         if(b>c)n=c;         if(b<c)n=b;     }     else {         if(a>c)n=c;         else n=a;     }     do {          if(a%n==0&&b%n==0&&c%n==0) {}         else n--;     } while(a%n!=0||b%n!=0||c%n!=0);     printf("最大公约数%d",n);     return 0; } 你的while语句判断不对,n%a==0&&n%b==0&&n%c==0表示要跳出循环了，所以你的代码里这个while的条件必定是这个条件的相反条件，当然其实可以直接写while(1),可以在if那个条件满足时加break跳出循环; 满足跳出时n不就是那个需要的数吗？[/quote] while条件里的参数是非0继续循环，0停止循环，你要是写成&&，你想想是不是n%a!=0就满足条件跳出循环了，其实你想要做的是都满足三个都被整除才跳出循环，你可以在循环里 n++;后面加个bool值的变量，然后将你代码里的n%a!=0&&n%b!=0&&n%c!=0赋值给该变量，看看是true还是false，你会发现，n只要被一个数整除，他就是false了（放在你的while条件里就是跳出循环了）

user: user-3
content: 感觉还是不够严谨啊，如果a=c的话，你这个n都没有赋初值就是一个随机数了呀，可以不用写如果a大于c然后又写如果a小于c，直接用else就好了。

user: user-2
content: 解决了问题的话就结贴吧

user: user-0
content: 引用 5 楼 datoulaile123的回复:[quote=引用 4 楼 SYoooooh 的回复:] [quote=引用 3 楼 datoulaile123的回复:]#include<stdio.h>  int main() {     int  a,b,c;     scanf("%d%d%d",&a,&b,&c);     int n;     if(a>b) {         if(c>a)n=c;         if(c<a)n=a;     }     else {         if(b>c)n=b;         else n=c;     }     do {         if(n%a==0&&n%b==0&&n%c==0) {}         else n++;     } while(n%a!=0||n%b!=0||n%c!=0);     printf("最小公倍数%d",n);     if(a>b) {         if(b>c)n=c;         if(b<c)n=b;     }     else {         if(a>c)n=c;         else n=a;     }     do {          if(a%n==0&&b%n==0&&c%n==0) {}         else n--;     } while(a%n!=0||b%n!=0||c%n!=0);     printf("最大公约数%d",n);     return 0; } 你的while语句判断不对,n%a==0&&n%b==0&&n%c==0表示要跳出循环了，所以你的代码里这个while的条件必定是这个条件的相反条件，当然其实可以直接写while(1),可以在if那个条件满足时加break跳出循环; 满足跳出时n不就是那个需要的数吗？[/quote] while条件里的参数是非0继续循环，0停止循环，你要是写成&&，你想想是不是n%a!=0就满足条件跳出循环了，其实你想要做的是都满足三个都被整除才跳出循环，你可以在循环里 n++;后面加个bool值的变量，然后将你代码里的n%a!=0&&n%b!=0&&n%c!=0赋值给该变量，看看是true还是false，你会发现，n只要被一个数整除，他就是false了（放在你的while条件里就是跳出循环了）[/quote] 把while 判断改成丨丨连接就可以，对吧，我也是猛地一下想起来的&&只要满足一个就会跳出，我太大意了，谢谢呀

user: user-0
content: 引用 3 楼 datoulaile123的回复:#include<stdio.h>  int main() {     int  a,b,c;     scanf("%d%d%d",&a,&b,&c);     int n;     if(a>b) {         if(c>a)n=c;         if(c<a)n=a;     }     else {         if(b>c)n=b;         else n=c;     }     do {         if(n%a==0&&n%b==0&&n%c==0) {}         else n++;     } while(n%a!=0||n%b!=0||n%c!=0);     printf("最小公倍数%d",n);     if(a>b) {         if(b>c)n=c;         if(b<c)n=b;     }     else {         if(a>c)n=c;         else n=a;     }     do {          if(a%n==0&&b%n==0&&c%n==0) {}         else n--;     } while(a%n!=0||b%n!=0||c%n!=0);     printf("最大公约数%d",n);     return 0; } 你的while语句判断不对,n%a==0&&n%b==0&&n%c==0表示要跳出循环了，所以你的代码里这个while的条件必定是这个条件的相反条件，当然其实可以直接写while(1),可以在if那个条件满足时加break跳出循环; 满足跳出时n不就是那个需要的数吗？

user: user-2
content: #include<stdio.h>  int main() {     int  a,b,c;     scanf("%d%d%d",&a,&b,&c);     int n;     if(a>b) {         if(c>a)n=c;         if(c<a)n=a;     }     else {         if(b>c)n=b;         else n=c;     }     do {         if(n%a==0&&n%b==0&&n%c==0) {}         else n++;     } while(n%a!=0||n%b!=0||n%c!=0);     printf("最小公倍数%d",n);     if(a>b) {         if(b>c)n=c;         if(b<c)n=b;     }     else {         if(a>c)n=c;         else n=a;     }     do {          if(a%n==0&&b%n==0&&c%n==0) {}         else n--;     } while(a%n!=0||b%n!=0||c%n!=0);     printf("最大公约数%d",n);     return 0; } 你的while语句判断不对,n%a==0&&n%b==0&&n%c==0表示要跳出循环了，所以你的代码里这个while的条件必定是这个条件的相反条件，当然其实可以直接写while(1),可以在if那个条件满足时加break跳出循环;

user: user-4
content: 你do while循环用的也太复杂了吧，楼上说的没错就是循环那边的问题 do { 		if (n % a == 0 && n % b == 0 && n % c == 0) { break; } 		else n++; 	} while (1);

user: user-5
content: 电脑没有编译器，没有编译，大体看了下，如果没有编译问题，我发现一个疑点就是："!="不等于，程序里面不应该是"=="吗？