#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調試的時候發(fā)現值比較小的時候可以正常運行,但是值比較大之后,if語句在第二次開始就會把a=a/i這個操作給省略掉,求教為什么會這樣以及怎么改?
2 回答
已采納

昵稱好難起757
TA貢獻17條經驗 獲得超0個贊
你if語句沒有加大括號,導致只執(zhí)行了a/=i就返回循環(huán)了,執(zhí)行完循環(huán)之后才執(zhí)行a/=i后面的語句。

昵稱好難起757
TA貢獻17條經驗 獲得超0個贊
改成這樣:
#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);
}
- 2 回答
- 0 關注
- 1369 瀏覽
添加回答
舉報
0/150
提交
取消