반응형
출처: http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=545&sca=5090
Approach
부호처리
부호의 경우 어느 한쪽만 음수인 경우 곱셈결과에 부호를 붙이면 됩니다.
단, 곱셈처리된 피연산자 영역을 전달하기 위해 아래와 같이 인자를 전달합니다.
if) a가 음수라면 a + 1, 양수이면 a + 0으로 시작주소가 던져집니다. (b도 마찬가지)
곱셈 처리
앞에서 부터 이중 for문으로 A[i] 각 자리와 B[j]들을 곱한 결과를 ans[]에 누적합니다.
뒤에서 부터 ans[]에 누적된 값들을 아래와 같이 처리합니다.
#include <stdio.h>
int strlen(const char* s, int len = 0){
while (s[len]) len++;
return len;
}
void multi(char* a, char* b) {
int ans[210] = { 0 };
int aLen = strlen(a), bLen = strlen(b);
for (int i = 0; i < aLen; i++) {
for (int j = 0; j < bLen; j++) {
ans[i + j] += (a[i] - 48) * (b[j] - '0');
}
}
int ansLen = aLen + bLen - 1;
for (int i = ansLen - 1; i > 0; i--) {
ans[i - 1] += ans[i] / 10;
ans[i] %= 10;
}
// 정답 출력
for (int i = 0; i < ansLen; i++) {
printf("%d", ans[i]);
}
printf("\n");
}
int main() {
char a[110], b[110];
int aop, bop;
while (1) {
scanf("%s", a);
// 0을 입력받은 경우 종료
if (a[0] == '0') break;
scanf("%s", b);
// 곱해주는 수가 0인 경우
if (b[0] == '0') {
printf("0\n");
continue;
}
aop = (a[0] == '-');
bop = (b[0] == '-');
if (aop + bop == 1) printf("-");
// a, b가 음수인 경우 부호 다음 지점 부터 곱셈 연산되도록 인자 전달
// ex) a의 1번, b의 1번
multi(a + aop, b + bop);
}
return 0;
}
반응형
'PS 문제 풀이 > Jungol' 카테고리의 다른 글
[Jungol] 정올 1307 문자사각형1 (0) | 2021.03.17 |
---|---|
[Jungol] 정올 1274 2진수를 10진수로... (0) | 2021.03.17 |
[Jungol] 정올 1374 긴 자릿수 덧셈 뺄셈 (0) | 2021.03.16 |
[Jungol] 정올 1035 최대값 (0) | 2021.03.16 |
[Jungol] 정올 1936 꼭지점 개수 (0) | 2021.03.16 |
댓글