我是一名非常新的程序员。这是用C. 我必须创建一个程序,它接受两个输入整数和正方形较小的一个,并将较大的一个加倍,如果两个输入是相同的,则保持整数相同。 我不能使用关系运算符(<,>,< =,> =,或==)或if语句。我该如何开始呢?我知道我将不得不使用模数,但我没有看到如何。 任何建议将不胜感激!
答案 0 :(得分:2)
这是让你走上正轨的间接答案:
x = y
X % y == 0
5 % 5 == 0
x < y
x % y == x
3 % 7 == 3
3 % 3 == 0
答案 1 :(得分:0)
请看看这个网站: http://graphics.stanford.edu/~seander/bithacks.html#IntegerMinOrMax
它显示了如何比较没有分支的两个整数。
答案 2 :(得分:0)
扰流:
#include <stdio.h>
void no_if(int *p, int *q)
{
int *small, *large;
int diff = *p != *q;
small = *p < *q ? p : q;
large = *p > *q ? p : q;
*large += (diff) ? *large : 0;
*small *= (diff) ? *small : 1;
}
int main(void)
{
int i,j;
for (i=0; i < 3; i++) {
for (j=0; j < 3; j++) {
int ix=i;
int jx=j;
no_if ( &ix, &jx);
printf("%d %d -> %d %d\n", i, j, ix, jx );
}
}
return 0;
}
更新:这使用比较/关系运算符。
答案 3 :(得分:-1)
您可以使用三元运算符
result_a=(!((a-b)&0x8000000))?2*a:((a<b)?a*a:a);
result_b=(b>a)?2*b:((b<a)?b*b:b);
新更新: 或使用整数的最高位:
result_a=((b-a)&0x80000000)*2*a+((a-b)&0x80000000)*a*a*(!!(a-b))+ (!(a-b))*a;
result_a=((a-b)&0x80000000)*2*ab+((b-a)&0x80000000)*b*b*(!!(a-b))+ (!(a-b))*b;