結果

問題 No.3057 A xor B = C
ユーザー mannshi222jpmannshi222jp
提出日時 2022-02-11 15:20:32
言語 C
(gcc 12.3.0)
結果
WA  
実行時間 -
コード長 5,876 bytes
コンパイル時間 1,702 ms
コンパイル使用メモリ 30,848 KB
実行使用メモリ 6,944 KB
最終ジャッジ日時 2024-06-27 09:34:15
合計ジャッジ時間 2,136 ms
ジャッジサーバーID
(参考情報)
judge1 / judge3
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 WA -
testcase_01 WA -
testcase_02 WA -
testcase_03 WA -
testcase_04 WA -
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <stdio.h>
#include <stdbool.h>
#include <string.h>

int divide( char *s );

bool zero( char *s );

int main()
{
        char a[10000];
        char b[10000];
        char tmp[10000];
        char ttmp[10000];

        int la, lb;
        int ad, bd;
        int t, tt;

        int len;
        scanf( "%s\n", a );
        scanf( "%s\n", b );

        // 桁そろえ
        la = strlen( a );
        lb = strlen( b );
        if( la > lb ) {
                for( int i = 0; i < la - lb; i++ ) {
                        tmp[i] = '0';
                }
                tmp[la-lb] = '\0';
                strcat( tmp, b );
                strcpy( b, tmp );
        }
        else if( la < lb ) {
                for( int i = 0; i < lb - la; i++ ) {
                        tmp[i] = '0';
                }
                tmp[lb-la] = '\0';
                strcat( tmp, a );
                strcpy( a, tmp );
        }
/*
        printf("<%s>\n", a);
        printf("<%s>\n", b);
        fflush(stdout);
/**/

        len = strlen( a );
        while( !zero( a ) || !zero( b ) ) {
                la = strlen( a );
                ad = ( a[la -1] - '0' ) % 2;
                bd = ( b[la -1] - '0' ) % 2;
                if( ad == bd ) {
                        tmp[t++] = '0';
                }
                else {
                        tmp[t++] = '1';
                }
                divide( a );
                divide( b );

        }
        tmp [t] = '\0';

        // reverse
        tt = 0;
        t--;
        do {
                ttmp[tt++] = tmp[t--];
         } while( t >= 0 );
        ttmp[tt] = '\0';


        if( zero( ttmp ) ) {
                printf( "0\n" );
                return 0;
        }

        tt = 0;
        while( ttmp[tt++] == '0' ) ;

        strcpy( tmp, ttmp+tt-1 );


        printf("%s\n", tmp );




        return 0;
}

int divide( char *s )
{

        char tmp[100000];
        int t = 0;
        bool crr;

        crr = false;
        for( int i = 0; s[i] != '\0'; i++ ) {
                if( crr == false ) {
                        switch( s[i] ) {
                        case '0':
                                tmp[t++] = '0';
                                crr = false;
                                break;
                        case '2':
                                tmp[t++] = '1';
                                crr = false;
                                break;
                        case '4':
                                tmp[t++] = '2';
                                crr = false;
                                break;
                        case '6':
                                tmp[t++] = '3';
                                crr = false;
                                break;
                        case '8':
                                tmp[t++] = '4';
                                crr = false;
                                break;

                        case '1':
                                tmp[t++] = '0';
                                crr = true;
                                break;
                        case '3':
                                tmp[t++] = '1';
                                crr = true;
                                break;
                        case '5':
                                tmp[t++] = '2';
                                crr = true;
                                break;
                        case '7':
                                tmp[t++] = '3';
                                crr = true;
                                break;
                        case '9':
                                tmp[t++] = '4';
                                crr = true;
                                break;
                        }
                }
                else { // crr == true
                        switch( s[i] ) {
                        case '0':
                                tmp[t++] = '5';
                                crr = false;
                                break;
                        case '2':
                                tmp[t++] = '6';
                                crr = false;
                                break;
                        case '4':
                                tmp[t++] = '7';
                                crr = false;
                                break;
                        case '6':
                                tmp[t++] = '8';
                                crr = false;
                                break;
                        case '8':
                                tmp[t++] = '9';
                                crr = false;
                                break;

                        case '1':
                                tmp[t++] = '5';
                                crr = true;
                                break;
                        case '3':
                                tmp[t++] = '6';
                                crr = true;
                                break;
                        case '5':
                                tmp[t++] = '7';
                                crr = true;
                                break;
                        case '7':
                                tmp[t++] = '8';
                                crr = true;
                                break;
                        case '9':
                                tmp[t++] = '9';
                                crr = true;
                                break;
                        }
                }
        }

        tmp[t] = '\0';
        strcpy( s, tmp );
        return 0;
}

bool zero( char *s )
{
        while( *s == '0' ) {
                s++;
        }
        if( *s == '\0' ) {
                return true;
        }
        else {
                return false;
        }
}
0