只是简单实现,还没有优化,先放上来再说。看上去还有点乱,应该还会有更简单的方法
#include <stdio.h> #include <string.h> #include <malloc.h> #include <stdlib.h> #define NUMLENTH 32 char *multibig(char *a,char *b,char *c) { if(NULL == a || NULL == b || NULL == c){ exit(0); } int len1,len2; len1 = strlen(a); len2 = strlen(b); int i,j; int len = len1 + len2 -2; for(i=len1-1;i>=0;i--){ /*因为是倒序的*/ for(j=len2-1;j>=0;j--){ int len3 = len - i - j; c[len3] += (a[i] - '0')*(b[j] - '0'); if(c[len3] >= 10){ c[len3+1] += (c[len3]/10); c[len3] %= 10; if(c[len3+1] >= 10){ int k=2; c[len3+k]++; c[len3+1] %= 10; while(c[len3+k] >= 10){ c[len3+k+1]++; c[len3+k] %= 10; k++; } } } } } return ; } int main(void) { char *a = NULL; char *b = NULL; char *c = NULL; a =(char *) malloc(NUMLENTH); if(NULL == a){ exit(0); } memset(a,NUMLENTH); b = (char *)malloc(NUMLENTH); if(NULL == b){ exit(0); } memset(b,NUMLENTH); c = (char *)malloc(NUMLENTH*2+1); if(NULL == c){ exit(0); } memset(c,NUMLENTH*2+1); printf("please input num 1:"); scanf("%s",a); printf("please input num 2:"); scanf("%s",b); multibig(a,b,c); int flag = 0; int i=0; printf("the result:"); for(i=NUMLENTH*2+1;i>=0;i--){ if(*(c+i) != 0 || flag !=0){ printf("%d",*(c+i)); flag =1; } } printf("\n"); }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。