C语言大数相乘(整形)
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语言大数相乘(整形)相关推荐
- c语言大数相乘的算法_MIT 算法导论(三)
标签:b站MIT算法导论课程的一些笔记,整理以(bu)后(hui)看 代码引用标记: 归并排序的C语言实现 第三节 分治法 分治法(Divide and conquer) 1) 分治法的步骤 把问题分 ...
- 大数相乘(c语言/c++)
大数相乘(c语言/c++) 方法一:做加法 方法二.做乘法 方法一:做加法 思路:模拟竖乘过程.将num2从后往前一个一个的去乘num1.然后累加.在累加的时候记得在末尾补0.补的0的个数就是第二个字 ...
- 面试官让你用C语言实现大数相乘,慌吗?
在之前的笔试题解析里面,我写了大数相加的问题,这里再剖析一个大数相乘,顾名思义,大数相乘就是这个数已经大到最大的数据类型都没有办法保存了. 我们看看最大的数据类型可以保存多大的数据. #include ...
- C语言无符号双字节乘法,华为OJ机试标题:两个大整数相乘(纯C语言实现两个大整数相乘,两种方法实现大数相乘)...
华为OJ机试题目:两个大整数相乘(纯C语言实现两个大整数相乘,两种方法实现大数相乘) 题目描述: 输出两个不超过100位的大整数的乘积. 输入: 输入两个大整数,如1234567 123 输出: 输出 ...
- c语言实现大数相乘,最简单的C语言实现大数相乘
前言 : 实现大数相乘比相加要难一点 , 但是仔细分析会发现很多共同之处 分析 : 1. 由数学归纳法会发现用一般的两数相乘方法计算 , 每计算一次都能够确定最终结果的一位数字 2. 比如说 : 45 ...
- c语言中大数相乘的方法,C++实现大数相乘算法
本文实例为大家分享了C++实现大数相乘的具体代码,供大家参考,具体内容如下 首先说一下乘法计算的算法:同样是模拟人工计算时的方法. 从低位向高位乘,在竖式计算中,我们是将乘数第一位与被乘数的每一位相乘 ...
- 大数相乘(C语言,分治算法)
问题: 由于编程语言提供的基本数值数据类型表示的数值范围有限,不能满足较大规模的高精度数值计算,因此需要利用其他方法实现高精度数值的计算,于是产生了大数运算.大数运算主要有加.减.乘三种方法. 下面就 ...
- C语言实现大数相乘(思路+代码+运行结果)
大数相乘 思路: 1.先将字符串倒序并转换为数字 2.逐位相乘,并存入一个数组e[i+j]中 3.处理进位,并消去多余的0 4.转换并把数组e[i]反转输出 #include<stdio.h&g ...
- 算法题-大数相乘问题
今天在网上看到一个大数相乘的问题,题目是这样的:输入两个整数,要求输出这两个数的乘积.输入的数字可能超过计算机内整形数据的存储范围. 分析: 由于数字无法用一个整形变量存储,很自然的想到用字符串来表示 ...
最新文章
- data pump工具
- Photoshop CC2019软件安装教程
- Oracle 11g 安装后续——开发工具篇
- CentOS 8 成为绝版!到底发生了什么?
- python爬虫机器人价格_Python
- PAT甲级 -- 1148 Werewolf - Simple Version (20 分)
- 鸿蒙系统发布会16号几点,华为鸿蒙手机系统正式定档发布,12月16日于我们见面...
- ps如何修改图片大小尺寸_PS新手入门教程:学习如何修改画布的大小
- 纯css打造菜单响应,纯 CSS 打造标准的导航菜单-1
- P3819 松江1843路
- html5标签对js影响,浅谈JS对html标签的属性的干预以及对CSS样式表属性的干预
- 单片机1到十五c语言,手把手教你学单片机的C语言程序设计(十五).pdf
- MySQL知识总结 (六) MySQL调优
- 在Eclipse中使用JUnit5进行单元测试
- 网闸准入控制负载均衡
- ubuntu下安装rtl8811cu/rtl8821cu网卡 Tplink WDN5200H网卡
- 【数据库原理与应用MySQL版】实验指导
- 在线客服api是什么?
- 下载没有种子链接用特征码下片的方法
- java poi excel导出2003版改成2007版本的时候报错
热门文章
- Linux(xUbuntu18.04)安装VMware workstation15.1 解决报错:Before you can runVMware
- 《设计中的色彩心理学》
- STM32芯片替代方案 | 从原厂资料中获取GD32F103VET6通信串口接口电路设计 | 第五集
- 潮位调和分析工具学习(1)——T_tide
- 无法从计算机验证正在安装驱动,intel CPU集显驱动失败,无法为此计算机验证正在安装的驱动程序...
- unity技术补全计划
- [野狐行][内存辅助][二重门更新中][2016/6/1]
- python 已知一个字符,在一个list中找出近似值或相似值, 模糊匹配
- 使用IE浏览器下载时候窗口一闪而过
- The supplied data appears to be in the OLE2 Format. You are calling the part of POI that deals with