#include #include #include 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 %s\n", a, 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; } }