結果

問題 No.353 ヘイトプラス
ユーザー しめはじめしめはじめ
提出日時 2019-07-03 09:04:27
言語 C
(gcc 12.3.0)
結果
AC  
実行時間 1 ms / 1,000 ms
コード長 1,697 bytes
コンパイル時間 384 ms
コンパイル使用メモリ 30,080 KB
実行使用メモリ 5,376 KB
最終ジャッジ日時 2024-07-03 22:44:20
合計ジャッジ時間 916 ms
ジャッジサーバーID
(参考情報)
judge2 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
5,248 KB
testcase_01 AC 1 ms
5,376 KB
testcase_02 AC 1 ms
5,376 KB
testcase_03 AC 1 ms
5,376 KB
testcase_04 AC 1 ms
5,376 KB
testcase_05 AC 1 ms
5,376 KB
testcase_06 AC 1 ms
5,376 KB
testcase_07 AC 1 ms
5,376 KB
testcase_08 AC 1 ms
5,376 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <stdlib.h>
#include <stdio.h>

// 数値を0/1の組み合わせの配列にセット
//  プラスを使えないのでループは逆から
void setBinVal( int n, long* buf ){
    int i;
    for( i = 32; i >= 0; i--){
        if( n == 0 ){
            break;
        }
        if( n % 2 == 0){
            buf[32-i] = 0;
        }
        else{
            buf[32-i] = 1;
        }
        n = n / 2;
    }
   return;
}

int main(void){
    long a, b;
    long c;
    scanf( "%ld %ld", &a, &b );
    long abuf[33];
    long bbuf[33];
    long cbuf[33];
    char buf[34];
    int i = 0;
    int kuriagari = 0;
    int idx = 0;
    buf[33] = '\0';

    for( i = 32; i >= 0; i--){
        abuf[32-i] = 0;
        bbuf[32-i] = 0;
        cbuf[32-i] = 0;
    }
    
    // 0/1を組み合わせて2進数を表現
    setBinVal( a, abuf );
    setBinVal( b, bbuf );

    // 1と0の組み合わせパターンで演算の代わりとする
    for( i = 32; i >= 0; i--){
        //操作したい位置
        idx = 32 - i;
        if( (abuf[idx] == 0) && (bbuf[idx] == 0) ){
            cbuf[idx] = kuriagari;
            kuriagari = 0;
        }else if( abuf[idx] == 1 && bbuf[idx] == 1 ){
            cbuf[idx] = kuriagari;
            kuriagari = 1;
        }else{
            if( kuriagari == 1 ){
                cbuf[idx] = 0;
                kuriagari = 1;
            }else{
                cbuf[idx] = 1;
                kuriagari = 0;
            }
        }
    }
    
    // 2進数文字列に
    for( i = 32; i >= 0; i--){
        buf[i] = ( cbuf[32-i] == 1 ) ? '1' : '0';
    }
    // 10進数数値に
    c = strtol( buf, NULL, 2);
    printf( "%d\n", c);
    return 0;
}
0