大数乘法
2016-03-19 22:17
417 查看
用数组做了一个大数乘法的算法,很粗糙,但很实用
1 #include <apue.h>
2 #define MAX 100
3
4 void my_mulity(char *buf1, char *buf2);
5
6 void my_mulity(char *buf1, char *buf2)
7 {
8 int len1 = 0;
9 int len2 = 0;
10 int i = 0;
11 int j = 0;
12 int len = 0;
13
14 len1 = strlen(buf1);
15 len2 = strlen(buf2);
16 len = len1 + len2;
17
18 int *result = (int *)malloc(sizeof(int) * len) ;
19 if(result == NULL){
20 return ;
21 }
22
23 for(i = 0; i < len; i++){
24 result[i] = 0;
25 }
26
27 for(i = 0; i < len1; i++){
28 for(j = 0; j < len2; j++){
29 result[i + j + 1] += (buf1[i] - '0')*(buf2[j] - '0');//为何i+j+1呢?对应起来
30 }
31 }
32
33 for(i = len - 1; i >= 0; i--){
34 if(result[i] >= 10){
35 result[i] = result[i] % 10; //进行进位和取余
36 result[i - 1] += result[i]/10;
37 }
38 }
39 i = 0;
40 while(result[i] == 0) i++; //防止一开始是0
41 printf("result:\n");
42 for(j = i; j < len; ++j){
43 printf("%d", result[j]);
44 }
45
46 }
47
48 int main(int ac, char **av)
49 {
50 char buf1[MAX] = {0};
51 char buf2[MAX] = {0};
52
53 printf("please input : mulitied\n");
54 scanf("%s", buf1);
55 printf("please input : mulitied\n");
56 scanf("%s", buf2);
57
58 my_mulity(buf1, buf2);
59 printf("\n");
60 return 0;
61 }
1 #include <apue.h>
2 #define MAX 100
3
4 void my_mulity(char *buf1, char *buf2);
5
6 void my_mulity(char *buf1, char *buf2)
7 {
8 int len1 = 0;
9 int len2 = 0;
10 int i = 0;
11 int j = 0;
12 int len = 0;
13
14 len1 = strlen(buf1);
15 len2 = strlen(buf2);
16 len = len1 + len2;
17
18 int *result = (int *)malloc(sizeof(int) * len) ;
19 if(result == NULL){
20 return ;
21 }
22
23 for(i = 0; i < len; i++){
24 result[i] = 0;
25 }
26
27 for(i = 0; i < len1; i++){
28 for(j = 0; j < len2; j++){
29 result[i + j + 1] += (buf1[i] - '0')*(buf2[j] - '0');//为何i+j+1呢?对应起来
30 }
31 }
32
33 for(i = len - 1; i >= 0; i--){
34 if(result[i] >= 10){
35 result[i] = result[i] % 10; //进行进位和取余
36 result[i - 1] += result[i]/10;
37 }
38 }
39 i = 0;
40 while(result[i] == 0) i++; //防止一开始是0
41 printf("result:\n");
42 for(j = i; j < len; ++j){
43 printf("%d", result[j]);
44 }
45
46 }
47
48 int main(int ac, char **av)
49 {
50 char buf1[MAX] = {0};
51 char buf2[MAX] = {0};
52
53 printf("please input : mulitied\n");
54 scanf("%s", buf1);
55 printf("please input : mulitied\n");
56 scanf("%s", buf2);
57
58 my_mulity(buf1, buf2);
59 printf("\n");
60 return 0;
61 }
相关文章推荐
- java大数乘法的简单实现 浮点数乘法运算
- 用x64汇编语言编写384位无符号整数乘法(上)
- 用x64汇编语言编写384位无符号整数乘法(下)
- 用x64汇编语言编写384位无符号整数乘法(中)
- 大数乘法——POJ2389
- 大数乘法(C++)
- DSOJ Multiplication of large integer(大数乘法)
- ACM大数相乘
- 数据结构实验之大数相乘
- 算法重拾之路——大数乘法
- leetcode:Multiply Strings(字符串的乘法)【面试算法题】
- C语言实现大数整数乘法
- 蓝桥杯 P1001(大数乘法)
- Leetcode: Multiply Strings
- 单链表实现大数加法、大数减法、大数乘法、大数指数运算
- poj 1001 Exponentiation
- 蓝桥杯 VIP 阶乘计算
- 精度计算(大数方面)
- uva 465 - Overflow 大数加法 大数乘法
- 大整数乘法