-3

我是一个非常新的程序员。这是使用 C 语言。我必须编写一个程序,该程序接受两个输入整数并将较小的整数平方并将较大的整数加倍,如果两个输入相同,则保持整数相同。我不能使用关系运算符(<、>、<=、>=、或==)或 if 语句。我该如何开始呢?我知道我将不得不使用模数,但我不知道如何使用。任何建议将不胜感激!

4

4 回答 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 回答