大数相乘
发布时间:2020-12-14 03:28:07 所属栏目:大数据 来源:网络整理
导读:? #include stdio.h#include stdlib.h#include string.h#define N 100void printResult(int *C,int n){int i;for (i=0; in C[i]==0; ++i) /*跳过头部的0元素*/;for (; in; ++i){printf("%d",C[i]);}printf("n");}void multiply(char const *A,char const *B
? #include <stdio.h> #include <stdlib.h> #include <string.h> #define N 100 void printResult(int *C,int n) { int i; for (i=0; i<n && C[i]==0; ++i) /*跳过头部的0元素*/ ; for (; i<n; ++i) { printf("%d",C[i]); } printf("n"); } void multiply(char const *A,char const *B) { int i,j,lenA,lenB,*C; if (A==NULL || B==NULL) { return ; } lenA = strlen(A); lenB = strlen(B); C = (int *)malloc(sizeof(int)*(lenA+lenB)); memset(C,sizeof(C)*(lenA+lenB)); for (i=lenB-1; i>=0; --i) { for (j=lenA-1; j>=0; --j) { C[i+j+1] += (B[i] - '0') * (A[j] - '0'); /*产生每一位未进位之前的结果,很巧妙,类似于优化的矩阵乘法*/ } } for (i=lenA+lenB-1; i>=1; --i) { C[i-1] += C[i] / 10; /*进位加到高位上*/ C[i] %= 10; } printResult(C,lenA+lenB); free(C); C = NULL; } int main(void) { char A[N],B[N]; while (scanf("%s%s",A,B) != EOF) { multiply(A,B); } return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |