C 언어 대수 곱 하기

C 언어의 대수 곱 하기 가장 간단 한 것 은 아 날로 그 필산 곱셈 이다.먼저 두 문자 배열 로 곱셈 연산 을 해 야 할 두 개의 대 수 를 받 아 a [], b [] 로 설정 하고 하나의 정형 배열 c [] 로 결 과 를 저장 합 니 다. 연산 을 할 때 a 배열 의 i 번 째 위치 데이터 와 b 데이터 의 j 번 째 위치 데 이 터 를 곱 한 결 과 는 c 데이터 의 i + j 번 째 위치 가 존재 합 니 다.
다른 두 개의 수 를 곱 하면 결과 의 길 이 는 이 두 개의 길이 의 합 을 초과 하지 않 을 것 이다.
첫 번 째 단 계 는 비트 에 따라 곱셈 을 집행 하여 비트 곱셈 의 결 과 를 결과 데이터 에 누적 하 는 것 이다.
두 번 째 단 계 는 한 사람 한 사람 이 한 자리 수 를 확보 하 는 것 이다.실행 과정 은 다음 과 같다.
 
프로그램 은 다음 과 같 습 니 다:
#include <STDIO.H>
#include <STDLIB.H>
#include <STRING.H>

int main(){
	
	char a[100],b[100];
	int *c,clen;
	int alen,blen;
	int i,j,carry;

	gets(a);
	gets(b);
	alen = strlen(a);
	blen = strlen(b);
	clen = alen+blen;     //                    
	
	c = (int*)malloc(sizeof(int)*(clen)); 
	memset(c,0,sizeof(int)*clen);

	//       ,        ,   c             
	for(i=alen-1;i>=0;i--){
		for(j=blen-1;j>=0;j--){
			//  i j,         (alen-1-i)+(blen-1-j)
			c[(alen-1-i)+(blen-1-j)] += (a[i]-'0')*(b[j]-'0');
		}
	}

	//    
	for(i=0;i<alen+blen-1;i++){
		carry = c[i]/10;
		c[i] = c[i]%10;
		c[i+1] += carry; 
	}
	//    0
	for(i=blen+alen-1;c[i]==0;i--);

	while(i>=0){
		printf("%d",c[i]);
		i--;
	}

	printf("
"); return EXIT_SUCCESS; }

좋은 웹페이지 즐겨찾기