#include <stdio.h> 

#include <string.h> 

#include <stdlib.h> 

#pragma warning( disable : 4996 ) 

// 입력받은 숫자 2진수로의 변환 함수 -> 함수로 구현 

void decToBi( char* str, int num ); 

// 2진수 덧셈 -> 함수로 구현 

char* binaryPlus( char* str1, char* str2 ); 

void main( void ) 

   // 10진수 변수 2개 

   int dec1 = 0; 

   int dec2 = 0; 

   // 2진수 변환될 문자열 변수 2개 - 32bit이므로 34선택 

   char bi1[34]; 

   char bi2[34]; 

   // 반환받을 2진수 공간 

   char* result = NULL; 

   // 10진수 입력 

   printf("첫번째 10진수 입력 : "); 

   scanf_s("%d", &dec1, 4 ); 

   printf("두번째 10진수 입력 : "); 

   scanf_s("%d", &dec2, 4 ); 

   // 함수로 반환될 2진수 변수 

   decToBi( bi1, dec1 ); 

   decToBi( bi2, dec2 ); 

   // 덧셈전 값 출력 

   printf("첫번째 10진수 : %d\t2진수 : %s\n", dec1, bi1 ); 

   printf("두번째 10진수 : %d\t2진수 : %s\n", dec2, bi2 ); 

   // 덧셈 함수 호출 

   result = binaryPlus( bi1, bi2 ); 

   // 반환된 2진수 -> 10진수 변수 

   printf("10진수 두 수의 합 : %d\n", dec1 + dec2 ); 

   printf("2진수 두 수의 합 : %s\n", result ); 

// 입력받은 숫자 2진수로의 변환 함수 -> 함수로 구현 

void decToBi( char* str, int num ) 

   itoa( num, str, 2 ); 

// 2진수 덧셈 -> 함수로 구현 

char* binaryPlus( char* str1, char* str2 ) 

   // 문자열 길이 

   unsigned int len1 = strlen( str1 ); 

   unsigned int len2 = strlen( str2 ); 

   // 문자열 임시공간 32bit 일때 최대 길이 33 + NULL 

   char temp[34] = "00000000000000000000000000000000"; 

   // 완전수 저장할 공간 

   char perfect = '0'; 

   // 더짧은 문자열 길이 

   int min = 0; 

   // 더긴 문자열 길이 

   int max = 0; 

   // 반복문 변수 

   int i; 

   // 뒤집힐 문자열 

   char* revStr1 = NULL; 

   char* revStr2 = NULL; 

   // 2진수 덧셈결과 

   char* result = NULL; 

   // 처음으로 나올 1 인덱스 

   int index = 0; 

   // 짧은 문자열 길이 구하기 

   if( len1 >= len2 ) 

   { 

      max = len1; 

      min = len2; 

   } 

   else 

   { 

      max = len2; 

      min = len1; 

   } 

   // 문자열 뒤집기 

   revStr1 = strrev( str1 ); 

   revStr2 = strrev( str2 ); 

   // 문자열 덧셈 시작 

   for( i = 0; i < 34; i++ ) 

   { 

      // 짧은 문자열까지의 덧셈 

      if( i < min+1 ) 

      { 

         // 둘다 1 일 떄 

         if( str1[i] == '1' && str2[i] == '1' ) 

         { 

            // 완전수가 0 일 떄 

            if( perfect == '0' ) 

            { 

               // 해당값은 0으로 

               temp[i] = '0'; 

               // 완전수는 1로 

               perfect = '1'; 

            } 

            // 완전수가 1 일 떄 

            else 

            { 

               // 해당값은 1로 

               temp[i] = '1'; 

               // 완전수는 1로 

               perfect = '1'; 

            } 

         } 

         // 둘중 하나가 1일 떄 

         else if( str1[i] == '1' || str2[i] == '1' ) 

         { 

            // 완전수가 0 일 떄 

            if( perfect == '0' ) 

            { 

               // 해당값은 1로 

               temp[i] = '1'; 

               // 완전값은 0으로 

               perfect = '0'; 

            } 

            // 완전수가 1 일 떄 

            else 

            { 

               // 해당값은 0으로 

               temp[i] = '0'; 

               // 완전값은 1로 

               perfect = '1'; 

            } 

         } 

         // 둘다 0일 떄 

         else 

         { 

            // 완전수가 0 일 떄 

            if( perfect == '0' ) 

            { 

               // 해당값은 0 

               temp[i] = '0'; 

            } 

            // 완전수가 1 일 떄 

            else 

            { 

               // 해당값은 1 

               temp[i] = '1'; 

               // 완전수는 0 

               perfect = '0'; 

            } 

         } 

      } 

      // 긴 문자열까지의 덧셈 

      else if( i < max ) 

      { 

         // 완전수가 0 일 떄 

         if( perfect == '0' ) 

         { 

            // str1 길이가 더길때 

            if( max == len1 ) 

            { 

               temp[i] = str1[i]; 

            } 

            else 

            { 

               temp[i] = str2[i]; 

            } 

         } 

         // 완전수가 1 일 떄 

         else 

         { 

            // str1이 더 길 떄 

            if( max == len1 ) 

            { 

               // 해당값이 1일때 

               if( str1[i] == '1' ) 

               { 

                  // 해당값을 0으로 

                  temp[i] = '0'; 

                  // 완전수 1로 

                  perfect = '1'; 

               } 

               else 

               { 

                  // 해당값 1로 

                  temp[i] = '1'; 

                  // 완전수 0으로 

                  perfect = '0'; 

               } 

            } 

            else 

            { 

               // 해당값이 1일때 

               if( str2[i] == '1' ) 

               { 

                  // 해당값을 0으로 

                  temp[i] = '0'; 

                  // 완전수 1로 

                  perfect = '1'; 

               } 

               else 

               { 

                  // 해당값 1로 

                  temp[i] = '1'; 

                  // 완전수 0으로 

                  perfect = '0'; 

               } 

            } 

         } 

      } 

   } 

   // 덧셈이 끝나면 temp를 뒤집는다. 

   result = strrev( temp ); 

   // 처음으로 나오는 1부터 마지막까지 문자열을 복사하고 리턴 

   for( i = 0; i < 32; i++ ) 

   { 

      if( result[i] == '1' ) 

      { 

         index = i; 

         break; 

      } 

   } 

   strcpy( str1, &result[index] ); 

   return str1; 



여기서 양의정수, 음의정수 입력하고 2진수로 변환 될때 출력값이 16자리로 나오게 하고싶은데 어디를 수정해야 하나요?