#include <string.h>
#define MAX 1000
// 0번째 칸에는 자리수를 저장합니다.
// 1번째 칸에는 1의 자리, 2번째 칸에는 10의 자리, 3번째 칸에는 100의 자리
// ... 등을 저장합니다. 최대 999자리까지 출력이 가능합니다.
int result[MAX]={0,}; // 결과
int mult1[MAX]={0,}; // 피승수
int mult2[MAX]={0,}; // 승수
void multiply() {
int i, j, x;
for(i=1;i<=mult2[0];i+=1) { // 승수의 각 자리로
for(j=1;j<=mult1[0];j+=1) { // 피승수의 각자리를 곱합니다.
result[i+j-1]+=mult2[i]*mult1[j]; // 결과에 더해줍니다.
x=result[i+j-1]; // 값이 9보다 크면 윗자리로 올라갑니다.
result[i+j-1]=x%10; // 제자리의 수만 남고
result[i+j]+=x/10; // 윗자리로 올라갑니다.
}
}
result[0]=mult1[0]+mult2[0]; // 결과의 자리수를 구합니다.
if(result[result[0]]==0) { result[0]-=1; }
}
// 출력은 다시 큰 수 부터 출력해 준다.
void printResult() {
int i, x;
x=result[0];
for(i=0;i<x;i+=1) {
printf("%d", result[x-i]);
}
printf("\n");
}
int main() {
char m1[100];
char m2[100];
int i, x;
printf("입력1: ");
scanf("%s", m1);
printf("입력2: ");
scanf("%s", m2);
// 입력된 수를 뒤집어 준다.
x=strlen(m1);
for(i=0;i<x;i+=1) {
mult1[x-i]=m1[i]-'0';
}
mult1[0]=x;
x=strlen(m2);
for(i=0;i<x;i+=1) {
mult2[x-i]=m2[i]-'0';
}
mult2[0]=x;
// 곱해준다.
multiply();
// 결과를 출력해 준다.
printResult();
return 0;
}
'c·c++ > c 프로그래밍' 카테고리의 다른 글
소수점이 포함된 진법변환 (0) | 2013.05.31 |
---|---|
2진수를 10진수로 바꾸기 (0) | 2013.05.31 |
2의 누승구하기 (0) | 2013.05.31 |
if없는 지그재그 출력 (0) | 2013.05.29 |
카운터 프로그램 (0) | 2013.05.29 |