鱼C论坛

 找回密码
 立即注册
查看: 1903|回复: 8

[已解决]求帮忙看一下最大公约数

[复制链接]
发表于 2019-11-3 23:55:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <stdio.h>
  2. int main()
  3. {
  4.         int m,n,t,i,a;
  5.         printf("输入两个整数m,n:");
  6.         scanf("%d %d",&m,&n);
  7.        
  8.         while(i!=0)
  9.         {
  10.                 m%n==i;
  11.                 t=n;
  12.                 a=i;
  13.                 n=a;
  14.                 m=t;
  15.                
  16.         }  
  17.         printf("最大公约数为:%d",t);
  18.         return 0;
  19. }
复制代码
指点一下为啥while死循环了 运行的时候输入完数字就没反应了 谢谢!

最佳答案
2019-11-4 00:19:44
本帖最后由 jackz007 于 2019-11-4 01:58 编辑

      循环变量 i 没有赋初值,而且,在整个循环过程中,i 的值始终没给改变,如何能不死循环?
      试试我修改的代码:
  1. #include <stdio.h>
  2. int main(void)
  3. {
  4.         int m , n , t                                               ;
  5.         printf("输入两个整数 m , n : ")                             ;
  6.         scanf("%d%d", & m , & n)                                    ;
  7.         if(m > 0 && n > 0) for(; n > 0 ; t = m % n , m = n , n = t) ;
  8.         else m = 0                                                  ;
  9.         if (m > 1) printf("最大公约数为 : %d\n" , m)                ;
  10.         else printf("m , n 没有最大公约数\n")                       ;
  11. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-11-4 00:19:44 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2019-11-4 01:58 编辑

      循环变量 i 没有赋初值,而且,在整个循环过程中,i 的值始终没给改变,如何能不死循环?
      试试我修改的代码:
  1. #include <stdio.h>
  2. int main(void)
  3. {
  4.         int m , n , t                                               ;
  5.         printf("输入两个整数 m , n : ")                             ;
  6.         scanf("%d%d", & m , & n)                                    ;
  7.         if(m > 0 && n > 0) for(; n > 0 ; t = m % n , m = n , n = t) ;
  8.         else m = 0                                                  ;
  9.         if (m > 1) printf("最大公约数为 : %d\n" , m)                ;
  10.         else printf("m , n 没有最大公约数\n")                       ;
  11. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2019-11-4 00:51:51 | 显示全部楼层
本帖最后由 bin554385863 于 2019-11-4 03:51 编辑

#include <stdio.h>
int main()
{
        int m,n,t,i,a;
        printf("输入两个整数m,n:");
        scanf("%d %d",&m,&n);
        
        while(i!=0)——>i没有初始化,当然会陷入死循环
        {
                m%n==i;
                t=n;
                a=i;
                n=a;
                m=t;

  1. #include <stdio.h>
  2. int main(int argc, char const *argv[])
  3. {
  4.     int m = 1, n = 1, res = 0, count = 0;
  5.     printf("请输入计算的次数\n");
  6.     scanf("%d", &count);
  7.     while (count != 0)
  8.     {
  9.         printf("请输入要计算的两个数\n");
  10.         scanf("%d%d", &m, &n);
  11.         if ((n && m) != 0)
  12.         {
  13.             int t = m < n ? m : n; //最大公约数必然小于较小的数
  14.             for (size_t i = t; i >= 1; i--)
  15.             {
  16.                 if ((m % i == 0) && (n % i == 0))
  17.                 {
  18.                     res = i;
  19.                     break;
  20.                 }
  21.             }
  22.         }
  23.         else
  24.         {
  25.             printf("无效数字0, 请重新输入\n\n");
  26.             continue;
  27.         }  
  28.         printf("[%d]和[%d]的最大公约数是(%d)\n\n", m, n, res);
  29.         count--;
  30.         res = 0;
  31.     }
  32.     return 0;
  33. }

复制代码

---------------------------------------------------------------------------------------------------
PS E:\Users\admin\Documents\VScode> & 'c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.1\debugAdapters\bin\WindowsDebugLauncher.exe' '--stdin=Microsoft-MIEngine-In-ouganha0.xjx' '--stdout=Microsoft-MIEngine-Out-3d2cknc2.gdv' '--stderr=Microsoft-MIEngine-Error-o4fgkqzu.uva' '--pid=Microsoft-MIEngine-Pid-pnioebrm.avr' '--dbgExe=D:\MinGW\bin\gdb.exe' '--interpreter=mi'
请输入计算的次数
3
请输入要计算的两个数
32 0
无效数字0, 请重新输入

请输入要计算的两个数
23 25
[23]和[25]的最大公约数是(1)

请输入要计算的两个数
120 564
[120]和[564]的最大公约数是(12)

请输入要计算的两个数
999 555
[999]和[555]的最大公约数是(111)


PS E:\Users\admin\Documents\VScode>

评分

参与人数 1荣誉 +3 鱼币 +3 贡献 +3 收起 理由
段软w + 3 + 3 + 3 谢谢!!好厉害

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2019-11-4 09:20:06 | 显示全部楼层
jackz007 发表于 2019-11-4 00:19
循环变量 i 没有赋初值,而且,在整个循环过程中,i 的值始终没给改变,如何能不死循环?
      试 ...

谢谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-4 09:34:22 | 显示全部楼层
c语言种,定义变量不赋初始值,系统会给一个默认值(内存空间地址),你可以debuger看一下,对你理解有一定帮助。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-4 12:29:39 | 显示全部楼层
heboy18 发表于 2019-11-4 09:34
c语言种,定义变量不赋初始值,系统会给一个默认值(内存空间地址),你可以debuger看一下,对你理解有一定 ...

“系统会给一个默认值”

这句应该改成这样比较合适
系统会给一个随机值
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2019-11-5 11:02:34 | 显示全部楼层
人造人 发表于 2019-11-4 12:29
“系统会给一个默认值”

这句应该改成这样比较合适

表达错误,谢谢指正
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-5 12:44:33 | 显示全部楼层
heboy18 发表于 2019-11-4 09:34
c语言种,定义变量不赋初始值,系统会给一个默认值(内存空间地址),你可以debuger看一下,对你理解有一定 ...

好的 谢谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-5 12:45:05 | 显示全部楼层
人造人 发表于 2019-11-4 12:29
“系统会给一个默认值”

这句应该改成这样比较合适

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-6 20:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表