C语言大数相乘(整形)

我们在用C语言运算时int存不下很大的数字无法直接计算大数相乘,那么这时候就需要把数字当作字符先存下来,然后存入数组中一部分一部分的进行运算。我通过-纸短情长大佬的这篇博客理解了大数相乘的基本思路,并引用大佬的代码,但大佬没有讲的很细,我将我自己的理解发表出来以供参考,如有侵权请联系我删除。


首先给出这个图,对照这张图方便理解代码

下面是代码:


//大数乘法
#include<stdio.h>
#include<math.h>
#include<string.h>
#define M 10005
char s1[M],s2[M],s[M];
int a[M],b[M],c[M];
int main()
{int i,j,m,n,k;while(~scanf("%s%s",s1,s2)){memset(c,0,sizeof(c));n=strlen(s1);m=strlen(s2);k=n+m;//保证相乘后的位数不会大于kprintf("s1的长度=%d s2的长度=%d\n",n,m);/*-----------------把字符串s1和s2 逆序 用数字排列-------------*/for(i=0; i<n; i++)a[i]=s1[n-i-1]-'0';   //字符型减'0'可以得到整数型for(i=0; i<m; i++)b[i]=s2[m-1-i]-'0';/*------------------乘运算存入c中------------------*/for(i=0; i<m; i++)for(j=0; j<n; j++)c[i+j]+=a[j]*b[i];/*-----------------进位运算得到结果----------------*/for(i=0; i<=k; i++){if(c[i]>=10){c[i+1]+=c[i]/10;//进位c[i]%=10;}}/*-------------去除前导0---------------*/i=k;while(c[i]==0) i--;/*判断两个非负数之积是否为0,以及逆序打印c[]*/if(i<0) printf("0");else{for(; i>=0; i--)printf("%d",c[i]);}printf("\n");}return 0;
}

C语言大数相乘(整形)相关推荐

  1. c语言大数相乘的算法_MIT 算法导论(三)

    标签:b站MIT算法导论课程的一些笔记,整理以(bu)后(hui)看 代码引用标记: 归并排序的C语言实现 第三节 分治法 分治法(Divide and conquer) 1) 分治法的步骤 把问题分 ...

  2. 大数相乘(c语言/c++)

    大数相乘(c语言/c++) 方法一:做加法 方法二.做乘法 方法一:做加法 思路:模拟竖乘过程.将num2从后往前一个一个的去乘num1.然后累加.在累加的时候记得在末尾补0.补的0的个数就是第二个字 ...

  3. 面试官让你用C语言实现大数相乘,慌吗?

    在之前的笔试题解析里面,我写了大数相加的问题,这里再剖析一个大数相乘,顾名思义,大数相乘就是这个数已经大到最大的数据类型都没有办法保存了. 我们看看最大的数据类型可以保存多大的数据. #include ...

  4. C语言无符号双字节乘法,华为OJ机试标题:两个大整数相乘(纯C语言实现两个大整数相乘,两种方法实现大数相乘)...

    华为OJ机试题目:两个大整数相乘(纯C语言实现两个大整数相乘,两种方法实现大数相乘) 题目描述: 输出两个不超过100位的大整数的乘积. 输入: 输入两个大整数,如1234567 123 输出: 输出 ...

  5. c语言实现大数相乘,最简单的C语言实现大数相乘

    前言 : 实现大数相乘比相加要难一点 , 但是仔细分析会发现很多共同之处 分析 : 1. 由数学归纳法会发现用一般的两数相乘方法计算 , 每计算一次都能够确定最终结果的一位数字 2. 比如说 : 45 ...

  6. c语言中大数相乘的方法,C++实现大数相乘算法

    本文实例为大家分享了C++实现大数相乘的具体代码,供大家参考,具体内容如下 首先说一下乘法计算的算法:同样是模拟人工计算时的方法. 从低位向高位乘,在竖式计算中,我们是将乘数第一位与被乘数的每一位相乘 ...

  7. 大数相乘(C语言,分治算法)

    问题: 由于编程语言提供的基本数值数据类型表示的数值范围有限,不能满足较大规模的高精度数值计算,因此需要利用其他方法实现高精度数值的计算,于是产生了大数运算.大数运算主要有加.减.乘三种方法. 下面就 ...

  8. C语言实现大数相乘(思路+代码+运行结果)

    大数相乘 思路: 1.先将字符串倒序并转换为数字 2.逐位相乘,并存入一个数组e[i+j]中 3.处理进位,并消去多余的0 4.转换并把数组e[i]反转输出 #include<stdio.h&g ...

  9. 算法题-大数相乘问题

    今天在网上看到一个大数相乘的问题,题目是这样的:输入两个整数,要求输出这两个数的乘积.输入的数字可能超过计算机内整形数据的存储范围. 分析: 由于数字无法用一个整形变量存储,很自然的想到用字符串来表示 ...

最新文章

  1. data pump工具
  2. Photoshop CC2019软件安装教程
  3. Oracle 11g 安装后续——开发工具篇
  4. CentOS 8 成为绝版!到底发生了什么?
  5. python爬虫机器人价格_Python
  6. PAT甲级 -- 1148 Werewolf - Simple Version (20 分)
  7. 鸿蒙系统发布会16号几点,华为鸿蒙手机系统正式定档发布,12月16日于我们见面...
  8. ps如何修改图片大小尺寸_PS新手入门教程:学习如何修改画布的大小
  9. 纯css打造菜单响应,纯 CSS 打造标准的导航菜单-1
  10. P3819 松江1843路
  11. html5标签对js影响,浅谈JS对html标签的属性的干预以及对CSS样式表属性的干预
  12. 单片机1到十五c语言,手把手教你学单片机的C语言程序设计(十五).pdf
  13. MySQL知识总结 (六) MySQL调优
  14. 在Eclipse中使用JUnit5进行单元测试
  15. 网闸准入控制负载均衡
  16. ubuntu下安装rtl8811cu/rtl8821cu网卡 Tplink WDN5200H网卡
  17. 【数据库原理与应用MySQL版】实验指导
  18. 在线客服api是什么?
  19. 下载没有种子链接用特征码下片的方法
  20. java poi excel导出2003版改成2007版本的时候报错

热门文章

  1. Linux(xUbuntu18.04)安装VMware workstation15.1 解决报错:Before you can runVMware
  2. 《设计中的色彩心理学》
  3. STM32芯片替代方案 | 从原厂资料中获取GD32F103VET6通信串口接口电路设计 | 第五集
  4. 潮位调和分析工具学习(1)——T_tide
  5. 无法从计算机验证正在安装驱动,intel CPU集显驱动失败,无法为此计算机验证正在安装的驱动程序...
  6. unity技术补全计划
  7. [野狐行][内存辅助][二重门更新中][2016/6/1]
  8. python 已知一个字符,在一个list中找出近似值或相似值, 模糊匹配
  9. 使用IE浏览器下载时候窗口一闪而过
  10. The supplied data appears to be in the OLE2 Format. You are calling the part of POI that deals with