프로그래밍 알고리즘
[정올 1262] 긴 자리 곱셈
꾸준한사람
2023. 1. 3. 00:38
반응형
http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&code=1262&sca=99
JUNGOL
www.jungol.co.kr
#include <stdio.h>
char A[105], B[105], ans[205];
int strlen(const char* s, int len = 0) {
while (s[len]) len++;
return len;
}
int strcmp(const char* s, const char* t) {
while (*s && *s == *t) s++, t++;
return *s - *t;
}
void strcpy(char* dest, const char* src) {
while ((*dest++ = *src++));
}
int input() {
for (int i = 0; i < 105; i++) A[i] = B[i] = 0;
for (int i = 0; i < 205; i++) ans[i] = 0;
scanf("%s", A);
if (A[0] == '0' && strlen(A) == 1) return 0;
scanf("%s", B);
return 1;
}
void add(int val, int idx) {
if (ans[idx] == 0) ans[idx] = '0' + val;
else {
if (ans[idx] + val > '9') {
ans[idx] += val - 10;
add(1, idx - 1);
}
else ans[idx] += val;
}
}
int main() {
int alen, blen, bgidx;
while (input()) {
alen = strlen(A);
blen = strlen(B);
if (blen == 1 && B[0] == '0') { printf("0\n"); continue; }
for (int i = alen - 1; i >= 0; i--) //alen 10이면 9부터 시작, alen - i = 1~
{
if (A[i] == '-') continue;
int a, b, dg10, dg1;
a = A[i] - '0';
for (int j = blen - 1; j >= 0; j--) //blen 7이면 6부터 시작, blen - j = 1~
{
if (B[j] == '-') continue;
b = B[j] - '0';
dg1 = a * b;
dg10 = dg1 / 10;
dg1 = dg1 % 10;
add(dg1, 205 - (alen - i) - (blen - j));
add(dg10, 205 - (alen - i) - (blen - j) - 1);
}
}
for (bgidx = 1; ans[bgidx] == 0 || ans[bgidx] == '0'; bgidx++) {}
if ((A[0] == '-' || B[0] == '-') && (A[0] != '-' || B[0] != '-'))
ans[--bgidx] = '-';
printf("%s\n", ans + bgidx);
}
return 0;
}
반응형