我想检查分数 2 4(例如)是否可以简化为 1 2!!
然而逻辑条件失败。
#include <stdio.h>
int main()
{
int a,b,live=1;
printf("\n\nInput integers for fraction:");
scanf(" %d%d",&a,&b);
while(live){
if(!(a%2 && b%2)){
a/=2;
b/=2;
}else if(!(a%3 && b%3)){
a/=3;
b/=3;
}else if(!(a%5 && b%5)){
a/=5;
b/=5;
}else if(!(a%7 && b%7)){
a/=7;
b/=7;
}else live--;
}
printf("Simplified Fraction is %d/%d",a,b);
}
最佳答案
条件a%2
相当于a%2 != 0
,即它测试a
是否不 可被 2 整除。来自 De Morgan's Laws ,条件 if(!(a%2 && b%2))
相当于 if(!(a%2) || !(b%2))
或 if((a%2 == 0) || (b%2 == 0))
,这不是您想要的。
您确实想测试 if((a%2 == 0) && (b%2 == 0))
-- 也就是说,如果两者都是能被 2 整除,而不是如果其中一个能被 2 整除。这样写也不会那么困惑。
而且很明显,为了简化任何分数,您需要测试所有可能的质因数,而这对于有限数量的 if
语句来说是不可能做到的。建议的方法是使用 Euclidean algorithm确定分子和分母的最大公约数,然后将它们除以 GCD 以获得简化形式的分数。
关于c - 如果条件为模,则逻辑条件失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21145313/