-3

私は非常に新しいプログラマーです。これは C を使用しています。2 つの入力整数を取り、小さい方を 2 乗し、大きい方を 2 倍し、2 つの入力が同じ場合は整数を同じに保つプログラムを作成する必要があります。関係演算子 (<、>、<=、>=、または ==) または 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

分岐のない2つの整数を比較する方法を示しています。

于 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);

new 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 に答える