작성 날짜 : 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; } |
출력결과
'Programming > C/C++' 카테고리의 다른 글
[Effective C++] 낌새만 보이면 const를 들이대 보자! (0) | 2015.04.16 |
---|---|
[Effective C++] #define을 쓰려거든 const, enum, inline을 떠올리자 (0) | 2015.04.16 |
[Effective C++] C++를 언어들의 연합체로 바라보는 안목은 필수 (0) | 2015.04.16 |
[C++] 연산자 우선순위 (0) | 2015.04.16 |
[C/C++] rand function (0) | 2015.04.16 |