uva10106 (高精度乘法)

来源:互联网 发布:直通车钻展淘宝客 编辑:程序博客网 时间:2024/05/16 08:34

题意: 高精度乘法。


思路: 直白的高精度乘法。 核心代码是 乘 的那部分。经常忘记。


算法复杂度: o(N^2) N是数的位数。


代码:

#include <cstdio>#include <cstring>using namespace std;#define MAX_N 1000void toDigit(char *str, int *digit){int len = strlen(str);for (int i = 0, j = len - 1; i < len; i++, j--) {digit[i] = (int)(str[j] - '0');}}int main(){char strNumA[MAX_N], strNumB[MAX_N];while (scanf("%s%s", strNumA, strNumB) == 2) {int dgtNumA[MAX_N], dgtNumB[MAX_N], rslt[MAX_N];memset(dgtNumA, 0, sizeof(dgtNumA));memset(dgtNumB, 0, sizeof(dgtNumB));memset(rslt, 0, sizeof(rslt));int lenA = strlen(strNumA);int lenB = strlen(strNumB);if (strNumA[0] == '0' || strNumB[0] == '0') {printf("0\n");continue;}toDigit(strNumA, dgtNumA);toDigit(strNumB, dgtNumB);for (int i = 0; i <= lenA; i++) {int s = 0;for (int j = 0; j <= lenB; j++) {s = rslt[i+j] + s + dgtNumA[i] * dgtNumB[j];rslt[i+j] = s % 10;s = s / 10;}}int i = MAX_N;while (i >= 0 && rslt[--i] == 0);while (i >= 0) {printf("%d", rslt[i--]);}printf("\n");}return 0;}


原创粉丝点击