大数相乘

来源:互联网 发布:Mac版本好玩的网络游戏 编辑:程序博客网 时间:2024/06/05 18:39

 

#include <stdio.h>#include <stdlib.h>#include <string.h>#define N 100void 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, 0, 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;}


 

0 0
原创粉丝点击