码迷,mamicode.com
首页 > 其他好文 > 详细

高精度乘法

时间:2017-07-01 16:21:35      阅读:375      评论:0      收藏:0      [点我收藏+]

标签:printf   转化   来源   ++   str   nbsp   乘法   pre   scanf   

计算大数间的乘法,原理来源我们的乘法笔算

          1   2   3
  *       5   6   7
  *--------------------------
          7   14  21
      6   12  18
 5   10   15   
*--------------------------
 5   16   34  32  21

高精度乘法一共分为4步:

1.运算前的准备:

(1)输入两个字符串

1 char num1[100] = {0}, num2[100] = {0};
2 int a[100] = {0}, b[100] = {0};
3 scanf("%s%s", num1, num2);
4 int n = strlen(nmu1);
5 int m = strlen(num2);

(2)将其转化为数字形式。注意:因为乘法从末尾开始,所以数字要倒叙存储。

1 int i, j;
2 for(i = 0, j = n-1; i < n; i++, j--) 
3   a[i] = nmu1[j]-0;
4 for(i = 0; j = m-1; i < m; i++, j--)
5   b[i] = num2[j]-0;

2.一位一位的运算。

1 int c[3000] = {0};
2 for(i = 0; i < n; i++) {
3   for(j = 0; j < m; j++)
4     c[i+j] = a[i] * b[j];
5}

3.处理进位。

1 for(i = 0; i < n+m; i++) {
2   if(c[i] > 10) {
3     c[i+1] += c[i] / 10;
4     c[i] %= 10;   
5   }
6 }

4.输出结果。

1 for(i = n+m-1; i >= 0; i--) {
2   if(c[i]) {
3     j = i;
4     break;
5   }
6 }
7 for(i = j; i < n+m; i++)
8   printf("%d", c[i]);

 

 

高精度乘法

标签:printf   转化   来源   ++   str   nbsp   乘法   pre   scanf   

原文地址:http://www.cnblogs.com/promise123/p/7102449.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!