猿问

循环当中会丢掉一个值

#include<stdio.h>
int main()
{
  int a,b,i;
  scanf("%d/%d",&a,&b);
  if(b!=0)
    for(i=2;i<=a&&i<=b;i++){
      if((a%i==0)&&(b%i==0))
        a=a/i;
        b=b/i;
        i--;
    }
  printf("%d/%d\n",a,b);
  return 0;
}

我设计了一个这样求最简分式的程序。用gdb调试的时候发现值比较小的时候可以正常运行,但是值比较大之后,if语句在第二次开始就会把a=a/i这个操作给省略掉,求教为什么会这样以及怎么改?

肖科夫斯基
浏览 1319回答 2
2回答

昵称好难起757

你if语句没有加大括号,导致只执行了a/=i就返回循环了,执行完循环之后才执行a/=i后面的语句。

昵称好难起757

改成这样: #include<stdio.h> int main() {   int a,b,i;   scanf("%d/%d",&a,&b);   if(b!=0)   for(i=2;i<=(a>b?b:a);i++) {   if((a%i==0)&&(b%i==0))   { a/=i; b/=i; i--;   }     }   printf("%d/%d\n",a,b); }
随时随地看视频慕课网APP
我要回答