結果
| 問題 |
No.353 ヘイトプラス
|
| コンテスト | |
| ユーザー |
しめはじめ
|
| 提出日時 | 2019-07-03 09:04:27 |
| 言語 | C (gcc 13.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 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 7 |
ソースコード
#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;
}
しめはじめ