블로그 이미지
Kanais
Researcher & Developer 퍼즐을 완성하려면 퍼즐 조각들을 하나 둘씩 맞춰나가야 한다. 인생의 퍼즐 조각들을 하나 둘씩 맞춰나가다 보면 인생이란 퍼즐도 완성되는 날이 오려나...?

calendar

1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

Notice

2015. 4. 16. 11:36 Programming/C/C++



작성 날짜 : 2011-03-31


일반 정수형 변수로는 30 자리 곱셈 연산을 하면 자릿수의 문제가 있다.

그래서 MAX로 정의된 문자열의 곱셈 프로그램을 짜보았다.

(MAX값은 30으로 했다.)

 

정수를 입력 받고..

printf("Input up number : ");

cn_up = get_number( up );

printf("Input dn number : ");

cn_dn = get_number( dn );

 

Main문 핵심 소스

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

{

         for(j=0;j<MAX;j++)

         {

                  if((res[i+j] + up[j] * dn[i]) > 99)

                  {

                           //       res[i+2] 이올림수를처리한다.

                           res[i+j+2] += ( res[i+j+1] + up[j] * dn[i] ) / 100;

                           //       res[i+1] 이올림수를처리한다.

                           res[i+j+1] = (( res[i+j] + up[j] * dn[i] ) % 100) / 10;

                           // % 10 나머지결과를처리한다.

                           res[i+j]  = ( res[i+j] + up[j] * dn[i] ) % 10;

                  }

                  else

                  {

                           //res[i+1] 이올림수를처리한다.

                           res[i+j+1] += ( res[i+j] + up[j] * dn[i] ) / 10;

                           // % 10 나머지결과를처리한다.

                           res[i+j] = ( res[i+j] + up[j] * dn[i] ) % 10;

                  }

         }

}

 

중간부분에 이렇게 조건을 써줘도 된다.

//res[i+1] 이올림수를처리한다.

         res[i+j+1] += ( res[i+j] + up[j] * dn[i] ) / 10;

         if(res[i+j+1] >= 10)

         {

                  res[i+j+2] += (res[i+j+2] + res[i+j+1])/10;

                  res[i+j+1] = res[i+j+1] % 10;

         }

         // % 10 나머지결과를처리한다.

         res[i+j] = ( res[i+j] + up[j] * dn[i] ) % 10;


get_number 함수

//  키보드로숫자를입력받는함수..

int get_number( char arr[MAX] ) {

         int count=0;

         int i=0;

         char temp[MAX]={0};

         scanf("%s", arr);

         // 배열의시작위치가0에서시작함으로123 이라고입력하면

         // 실제배열에는역순인000 ... 321 이라고저장되어있음

         // 배열의순서를뒤집는다

         for( i=0; i < strlen(arr); i++ ) {

                  temp[strlen(arr)-i-1] = arr[i];

                  count++;

         }

         for( i=MAX-1; i>=0; i-- ) {

                  arr[i]=temp[i];

                  temp[i]=0;

                  //       문자로입력받은것을숫자로계산하기위함

                  if( isdigit(arr[i]) ) {

                           arr[i] = arr[i]-'0';

                  } else {

                           arr[i] = 0;

                  }

         }

         return count;

         }

 

출력결과

posted by Kanais