首先说一下乘法计算的算法:同样是模拟人工计算时的方法。
从低位向高位乘,在竖式计算中,我们是将乘数第一位与被乘数的每一位相乘,记录结果之后,用第二位相乘,记录结果并且左移一位,以此类推,直到计算完最后一位,再将各项结果相加,得出最后结果。
计算的过程基本上和小学生列竖式做乘法相同。为编程方便,并不急于处理进位,而将进位问题留待最后统一处理。
我们以125*53为例来说明计算过程:

1、先算125*3,3*5得到15个1,3*2得到6个10,3*1得到3个100;

2、接下来算125*5,5*5得到25个10,2*5得到10个100,5*1得到5个1000;

3、乘法过程完毕。接下来从 a[0]开始向高位逐位处理进位问题。a[0]留下5,把1 加到a[1]上,a[1]变为32 后,应留下2,把3 加到a[2]上……最终使得a里的每个元素都是1 位数,结果就算出来了

结果就是6625。

总结一个规律:即一个数的第i 位和另一个数的第j 位相乘所得的数,一定是要累加到结果的第i+j 位上。这里i, j 都是从右往左,从0 开始数。
即:ans[i+j] = a[i]*b[j];

另外进位时要处理,当前的值加上进位的值再看本位数字是否又有进位;前导清零。

下面是C语言代码实现:

#include<stdio.h>
#include<string.h>
#define MAX 100
char a[MAX],b[MAX];//用字符串进行数字的输入
int x[MAX+10],y[MAX+10],z[MAX*2+10];//积的位数最多是因数位数的两倍
int main()
{ int len1,len2,i,j;while(~scanf("%s %s",a,b)){len1=strlen(a);len2=strlen(b);for(j=0,i=len1-1;i>=0;i--)//将字符串中字符转化为数字,并倒序储存 x[j++]=a[i]-'0';for(j=0,i=len2-1;i>=0;i--)y[j++]=b[i]-'0';for(i=0;i<len1;i++)//将因数各个位上的数字与另一个各个位上的数字相乘 {for(j=0;j<len2;j++)z[i+j]=z[i+j]+x[i]*y[j];//先乘起来,后面统一进行进位 }for(i=0;i<MAX*2;i++)//进行进位 {if(z[i]>=10)  //若>=10 {z[i+1]=z[i+1]+z[i]/10;  //将十位上数字进位 z[i]=z[i]%10;  //将个位上的数字留下}}for(i=MAX*2;i>0;i--)  //删除0的前缀 {if(z[i]==0)continue;elsebreak;}for(;i>=0;i--)  //倒序输出 printf("%d",z[i]);printf("\n");}return 0;
}

大数运算(4)——大数乘法相关推荐

  1. 大数运算(8)——大数幂运算

    大数幂运算的实现有了前面的大数乘法算法做铺垫,就是调用乘法函数,来循环去自乘,幂指数相应减1,直到幂指数变为0时结束. 下面是C语言代码实现: #include<stdio.h> #inc ...

  2. 大数运算(7)——大数阶乘(求阶乘)

    对于大数来说,一个数的阶乘是非常大的,同样,一个int类型的整数,他的阶乘就有可能会很大. 就拿50来说,他的阶乘位数是65位,就已经远远超过了long long int类型的最大值.这时候,我们要通 ...

  3. 大数运算(5)——大数除法(取模、取余)

    有关于大数除法的运算可以大致分为两种:一种是求商(取模),另一种是求余数(取余). 有两个大整数a和b,当a==b时,a/b==1,余数是0.(a!=0,b!=0) 当a>b时,a/b>= ...

  4. 大数运算(3)——大数减法

    大数的减法与大数加法的方法有相似之处的,都是模拟人工运算的,从最低位开始运算,一直到最高位. 其方法是: 首先,要判断减数和被减数哪一个位数长,减数位数长是正常减:被减数位数长,则被减数减减数,最后还 ...

  5. 大数运算(2)——大数加法

    /*大数加法的中心思想就是:模拟人工列竖式算加法的方法.先从最低位开始相加,判断是否进1,一直到最高位. 例如: 求12545642233+278545的和,该怎么算? 是这样的:      3  3 ...

  6. 大数运算(1)——大数储存

    int (16位) -32768-32767 (注:现在大多数的编译器的int型是32位的 也就是说跟long型的大小一样) long long或__int64(64位)     -922337203 ...

  7. 大数运算(6)——大数阶乘(求位数)

    对于求一个大数的阶乘的位数一般有两种方法: 第一种: lg(N!)=[lg(N*(N-1)*(N-2)*......*3*2*1)]+1 =[lgN+lg(N-1)+lg(N-2)+......+lg ...

  8. c语言编程 大数运算,求大数运算C语言代码?

    #define MAX 400 void my_read(int *a) { int len,i,flag=0; char s[MAX]; aa: while(1) { scanf("%s& ...

  9. Java实现大数运算

    一.大数运算介绍 大数运算,顾名思义,就是很大的数值的数进行一系列的运算.它是指由于编程语言提供的基本数值数据类型表示的数值范围有限,不能满足较大规模的高精度数值计算,因此需要利用其他方法实现高精度数 ...

最新文章

  1. 华为云IoT提出泛在新联接,让万物皆可联
  2. AI换脸引发全民恐慌,用对方向却能推动行业变革
  3. 27 个问题,告诉你Python为什么这么设计
  4. lt form gt 在html,HTML lt;formgt; 标签的 accept
  5. Erlang并发机制 –进程调度
  6. c语言switch同时比较多个变量,C语言学习if和switch分支选择结构
  7. Asp.Net Mvc表单提交之List集合
  8. 无锡太湖学院计算机科学与技术宿舍,无锡太湖学院宿舍怎么样
  9. javascript中this值的引用
  10. svg矢量图path路径标签坐标点英文字母含义
  11. jquery 输入框,单选按钮,下拉列表和复选框的使用
  12. PHP压缩CSS文件
  13. ionic3-ng4学习见闻--(多环境方案)
  14. bilibili助手C2C服务器,Bilibili助手
  15. 正态分布假设检验相关知识
  16. 纳米金13nm|金属纳米粒子/Nano gold制备方法-齐岳生物
  17. 用html实现彩虹动画
  18. 李宏毅《机器学习》误差
  19. 软件需求工程 高校教学平台 软件需求规格说明书 part 1 (重点!!!)
  20. Kubernetes Pod日志太大导致磁盘空间的问题

热门文章

  1. antlr + python
  2. 米家扫地机器人是石头代工_科沃斯投资研究报告 - 大湾区小家电分享
  3. 一、计算机程序申请专利注意事项解读
  4. CCCC天梯赛 L1-079 天梯赛的善良
  5. 思想改变命运,95后脑瘫小伙转型网络工程师,你为什么不可以?
  6. strcpy与strncpy的实现
  7. 理解CPU/寄存器/内存之间的关系
  8. SpringSecurity(二)、权限项目框架搭建
  9. 计算机基础(07)密码学基础
  10. (2019.2) Anki2.1 自建服务器临时解决方案及一些想法