我是一个非常新的程序员。这是使用 C 语言。我必须编写一个程序,该程序接受两个输入整数并将较小的整数平方并将较大的整数加倍,如果两个输入相同,则保持整数相同。我不能使用关系运算符(<、>、<=、>=、或==)或 if 语句。我该如何开始呢?我知道我将不得不使用模数,但我不知道如何使用。任何建议将不胜感激!
问问题
375 次
4 回答
2
这是一个间接的答案,可以帮助您上路:
x = y
X % y == 0
5 % 5 == 0
x < y
x % y == x
3 % 7 == 3
3 % 3 == 0
于 2012-09-16T20:04:47.507 回答
0
请看看这个网站: http: //graphics.stanford.edu/~seander/bithacks.html#IntegerMinOrMax
它展示了如何在没有分支的情况下比较两个整数。
于 2012-09-16T20:10:22.153 回答
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;
}
更新:这使用比较/关系运算符。
于 2012-09-16T20:37:46.623 回答
-1
您可以使用三元运算符
result_a=(!((a-b)&0x8000000))?2*a:((a<b)?a*a:a);
result_b=(b>a)?2*b:((b<a)?b*b:b);
新UPDATE:或使用整数的最高位:
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;
于 2012-09-16T19:59:20.213 回答