Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C++不知算法系列之高精度数值的加、减、乘、除算法

C++不知算法系列之高精度数值的加、减、乘、除算法

作者头像
一枚大果壳
发布于 2022-12-20 12:13:55
发布于 2022-12-20 12:13:55
1.5K04
代码可运行
举报
文章被收录于专栏:编程驿站编程驿站
运行总次数:4
代码可运行

1. 前言

什么是高精度数值处理算法?

高精度数值指因受限于计算机硬件的制约,超过计算机所能存储范围的数值。既然不能存储,更谈不上运算。

对此类数值的加、减、乘、除运算需要提供针对性的算法方能获取到结果。此类算法的设计思路因有别于其它算法,为了研究的方便,称此类算法为高精度数值处理算法。

本文将讲解如何实现对此类数值的加、减、乘、除运算。

2. 高精度数值的运算

对高精度数值运算时,需要从 2 个方面入手:

  • 如何存储:其基本存储思想是把数值以字符串的形式输入,然后转储于整型类型的数组中。理论上,数组的长度是不受限制的,或者采用一部分一部分的处理方式。
  • 如何计算:基本计算思想是把计算的2个数值以数组形式存储后,以逐位逐位地方式进行计算。如此,把大问题化解成了小问题。

2.1 高精度的加法

高精度数值相加的思路:

  • 用整型数组存储 2 个加数。为了遵循数组从头指针向尾指针扫描的使用习惯,存储时,可以把低位存储在前面,高位存储存在后面,至于是否如此存储可以根据实际设计的算法决定。如下存储 37465
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//加数一
int num1[100]={4,7,3,0,0……};
//加数二
int num2[100]={5,6,0,0……};
//相加结果,初始化为 0
int result[100]={0};
//存储两数相加的进位
int jinWei=0;
  • 遍历数组,对 2 个数组的对应位进行相加。如num1[0]+num2[0],且把相加结果存储到 result[0]位置。相加时,需要根据加法运算法则,考虑进位和不进位两种情况。

不进位情况:如 num1[0]+num2[0]=4+5不需要进位,直接把结果存储到 result[0]中。

进位情况:如num1[1]+num2[1]=7+6=13。有进位操作,则把结果的余数存储在result[1]=3中。把结果的商(进位值)临时存储在变量jinWei中。

最后,num1[2]+num2[2]+jinWei=3+0+1=4存储在result[2]中。

通用逻辑思想:

加数一和加数二对应位中的值和进位变量中的值一起相加,结果的余数存储在结果数组中,商存储在进位变量中。

编码实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
#include <cstring>
using namespace std;
int main(int argc, char** argv) {
 //存储加数一(被加数),初始为 0
 int num1[100]= {0};
 //加数一的长度
 int numLen1=0;
 //存储加数二(加数),初始为 0
 int num2[100]= {0};
 //加数二的长度
 int numLen2=0;
 //存储结果
 int result[100]= {0};
 //存储进位值
 int jinWei=0;
 //加数一的字符串格式
 string numStr1;
 //加数二的字符串格式
 string numStr2;
 //输入加数一
 cout<<"请输入加数一:"<<endl;
 cin>>numStr1;
 //转存至数组中(低位存储在数组的前面)
 numLen1= numStr1.size();
 for(int i=0; i<numLen1 ; i++) {
  num1[i]=numStr1[numLen1-1-i]-'0';
 }
 //输入加数二
 cout<<"请输入加数二:"<<endl;
 cin>>numStr2;
 numLen2=numStr2.size();
 //转存至数组中(反序存储)
 for(int i=0; i<numLen2; i++) {
  num2[i]=numStr2[numLen2-1-i]-'0';
 }
 numLen1=numLen1>=numLen2?numLen1:numLen2;
 int idx=0;
 while(idx<numLen1) {
  //对应位相加,注意,要加上进位值
  result[idx]=num1[idx]+num2[idx]+jinWei;
  //存储进位数值
  jinWei=result[idx] / 10;
  //存储余数
  result[idx] %=10;
  idx++;
 }
    //处理进位值
 if(jinWei>0) {
  result[idx]=jinWei;
 } else {
  idx--;
 }
    //输出
 for(int i=idx; i>=0; i--) {
  cout<<result[i]<<"";
 }
 cout<<endl;
 return 0;
}

输出结果:

2.2 高精度的减法

减法是加法的逆操作,加法时需要考虑进位操作, 减法时则需要考虑借位与不借位两种情况。

  • 不借位:6-5不需要借位。
  • 借位:如下十位的 46,需要借位。向百位借 1104变成14。高位3变成2

编码实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
#include <cstring>
using namespace std;
int main(int argc, char** argv) {
 //存储减数一(被减数),初始为 0
 int num1[100]= {0};
 //减数一的长度
 int numLen1=0;
 //存储减数二(减数),初始为 0
 int num2[100]= {0};
 //减数二的长度
 int numLen2=0;
 //存储结果
 int result[100]= {0};
 //减数一的字符串格式
 string numStr1;
 //减数二的字符串格式
 string numStr2;
 //输入减数一
 cout<<"请输入减数一:"<<endl;
 cin>>numStr1;
 //输入减数二
 cout<<"请输入减数二:"<<endl;
 cin>>numStr2;
 //转存至数组中(反序存储)
 numLen1= numStr1.size();
 for(int i=0; i<numLen1 ; i++) {
  num1[i]=numStr1[numLen1-1-i]-'0';
 }
 numLen2=numStr2.size();
 //转存至数组中(反序存储)
 for(int i=0; i<numLen2; i++) {
  num2[i]=numStr2[numLen2-1-i]-'0';
 }
 numLen1=numLen1>=numLen2?numLen1:numLen2;
 int idx=0;
 while(idx<numLen1) {
  //是否需要借位
  if(num1[idx]<num2[idx]) {
   //需要借位
   num1[idx]+=10;
   num1[idx+1]--;
  }
  result[idx]=num1[idx]-num2[idx];
  idx++;
 }
 for(int i=idx; i>=0; i--) {
  if(result[i]!=0)
   cout<<result[i]<<"";
 }
 cout<<endl;
 return 0;
}

执行结果:

如上代码,对原数组中的数据会进行修改。

也可以如下实现:使用一个借位标志变量,用来标识对某位进行计算时,是否借过位。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
#include <cstring>
using namespace std;
int mai123n(int argc, char** argv) {
    //省略……
    //是否借位标志信息
 int jieWei=0;
 int idx=0;
 while(idx<numLen1) {
  //如果被借位 
  if(jieWei==1) {
   //借位后是否小于减数 
   if(num1[idx]-jieWei<num2[idx]) {
    //需要再向高位借,借1 当 10 
    jieWei=1;
    result[idx]=num1[idx]-jieWei+jieWei*10-num2[idx];
   } else {
    //不需要借位 
    result[idx]=num1[idx]-jieWei-num2[idx];
    jieWei=0;
   }
  } else {
   //没有被借位 
   if(num1[idx]<num2[idx]) {
    //借 1 当 10 
    jieWei=1;
    result[idx]=num1[idx]+jieWei*10-num2[idx];
   } else {
    //不需要借位 
    jieWei=0;
    result[idx]=num1[idx]-num2[idx];
   }
  }
  idx++;
 }
    //省略……
 return 0;
}

虽然不会修改原数组中的数字,但逻辑有点累赘。

Tips:如上算法,需要保证大数减小数。

2. 3 高精度的乘法

商精度数值相乘可以有 2 种参考方案,如计算 246*65

2.3.1 方案一
  • 把高精度被乘数246分别乘以乘数的每一位,如先乘以5得到1230,然后再把246乘以6得到1476
  • 然后把12301476*10相加,得到15990
  • 这种方案当乘数位数较多时,需要借用的临时存储空间会增多,且需要使用循环进行高精度数值累加。并不可取。
2.3.2 方案二

方案二和方案一同工异曲,不借助额外的空间存储数据,使用结果数组存储中间计算数值,也存储最终结果数值。不产生额外的空间使用代价。

在高精度乘法时,有一个位置关系需要了解。如nums1[100]={6,4,2}nums[100]={5,6},当使用result[100]存储最终相乘结果时,nums1[i]*nums2[j]的结果存储在 result[i+j]中。

Tips:从数学法则可知,当 2 数两乘时,百位乘以十位的值要存储在结果的千位上。

  • 先计算被乘数的个位数值 6乘以乘数 65 的结果,也就是计算 6*65的结果。这个其实很好计算,使用一个进位变量存储进位值。
  • 再计算被乘数的十位数值 4乘以乘数的结果,也就计算机4*65的结果。在相乘时需要加上上述已经乘出来的结果 。如4*5+9=29。使用进位变量存储进位值,使用原来位置存储余数。

继续:4*6=24,加上原来的值3,再加上进位值2,最终结果是 29 ,取余数 9 存储,保存进位值 2

把最后的进位值作为进位作为结果数值存储 。

  • 把被乘数的百位2和乘数65相乘。逻辑和上面一样。

最后在结果中添加进位值。

编程实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
#include <cstring>
using namespace std;
int main(int argc, char** argv) {
    //省略乘数的输入,和前面相加数、相减数输入的代码一样
 for(int i=0; i<numLen1; i++) {
  int jinWei=0;
  for(int j=0; j<numLen2; j++) {
            //对应位相乘时需要加上原来的数值和进位值,可参照上面的演示图
   result[i+j]=num1[i]*num2[j]+jinWei+result[i+j];
   jinWei=result[i+j]/10;
   result[i+j]%=10;
  }
        //把进位值添加到结果数组中……
  result[i+numLen2]=jinWei;
 }
 int c=numLen1+numLen2;
 while(result[c]==0 && c>1)
  c--;
 for(int i=c; i>=0; i--) {
  cout<<result[i];
 }
 cout<<endl;
 return 0;
}

输出结果:

2.4 高精度相除

高精度相除分 2 种情况讨论:

  • 高精度除以低精度(低精度指计算机可以直接存储的数值)。
  • 高精度除以高精度。
2.4.2 高精度除以低精度

所谓高精度除以低精度,存储每次相除的商(0~9之间),其余数和被除数后面数字相加,作为新的被除数继续做除法。

如计算 642除以5的流程:

  • 6除以5。商为1作为结果,余数1暂存起来。
  • 45时,被除数需要加上上次余数的10倍再除。
  • 2除5时如上一样,需要更新被除数后再除。

编码实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
#include <cstring>
using namespace std;
int main(int argc, char** argv) {
 //存储被除数,初始为 0
 int num[100]= {0};
 //除数的长度
 int numLen=0;
 //除数的字符串格式
 string numStr;
 //存储结果
 int result[100]= {0};
 //低精度数字
 int num2;
 cout<<"请输入高精度被除数:"<<endl;
 cin>>numStr;
 cout<<"请输入低精度除数:"<<endl;
 cin>>num2;
 //转存至数组中
 numLen= numStr.size();
 for(int i=0; i<numLen ; i++) {
  //先计算高位,所以高位存储在数组的前面
  num[i]=numStr[i]-'0';
 }
 //临时变量,存储每次相除的余数
 int temp=0;
 for(int i=0; i<numLen; i++) {
  //每次相除,被除数加上上次相除的余数的10倍
  result[i]= (num[i]+temp*10) / num2;
  temp=(num[i]+temp*10) % num2;
 }
    cout<<"结果:";
 for(int i=0; i<numLen; i++) {
  if(result[i]!=0)
   cout<<result[i];
 }
 cout<<endl<<"余数:"<<temp;
 return 0;
}

输出结果:

逐位相除,效率显然是较低的,可以采用一次多位相除方案。可以自行思考。

2.4.2 高精度除以高精度

高精度除以高精度,可以把除法变成减法和加法操作。如:264 除 56的基本思路如下:

  • 第一次:264-56=208
  • 第二次:208-56=152
  • 第三次:152-56=96
  • 第四次:96-56=40
  • 第五次:40-56条件不成立,结束相减操作。

当相减的结果小于除数时,不再相减,则264 / 56结果为 4,余数为 40。如上所述,除了不间断地对 2 个数字进行相减,还要统计相减的次数,本质是一个累加操作,其累加次数可能是一个高精度数值,所以要使用高精度相加算法。

Tips:从数学角度思考,乘法的本质是加法操作,除法的本质是减法操作。

编码实现:代码中有注释,不再另行解释。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# include <iostream>
# include <cstring>
using namespace std;
/*
*初始化数组中的值
*/
void stringToNumber(int arr[]) {
 string snum;
 cin>>snum;
 arr[0] = snum.length();
 //用snum[0]存储数字长度
 for(int i=1; i<=arr[0]; i++)
  //将数串s转换为数组 a,并倒序存储
  arr[i] = snum[arr[0]-i] -'0';
}

/*
* 比较 2 个数字的大小
*/
int compare (int num1[],int num2[]) {
 //比较 2 个数字的位数
 if(num1[0]>num2[0]) return 1 ;
 if(num1[0]<num2[0]) return-1 ;
 //位数相同,则从高位向低位逐位比较
 for(int i = num1[0]; i>0; i--) {
  if (num1[i]>num2[i]) return 1 ;
  if (num1[i]<num2[i]) return- 1 ;
 }
 //各位都相等则两数相等
 return 0;
}

/*
* 使用函数封装前面的高精度数值相减算法
* num1-num2的结果存储在 num1 中
*/
void gjdJian(int num1[],int num2[]) {
 //比较两数大小
 int flag=compare(num1,num2);
 if (flag==0) {
  // 2 数相等
  num1[0] = 0;
  return;
 }
 if(flag==1) {
  for(int i = 1; i<= num1[0]; i++) {
   if(num1[i]<num2[i]) {
    //向上借位
    num1[i+1]--;
    num1[i]+= 10;
   }
   num1[i]-=num2[i];
  }
        //修正 num1 的位数信息
  while(num1[0]>0 && num1[num1[0]]==0)
   num1[0]--;
  return;
 }
}

/*
*高精度相除
*/
void gjdChu(int num1[],int num2[],int result[]) {
 //结果数值可能的位数
 result[0]=num1[0]-num2[0]+1;
 int count=0;
 //高精度累加的加数,加数只有一个有效的值 1 
 int tem[100]= {0,1};
 //进位值
 int temp=0;
 while  ( compare(num1,num2)>=0 ) {
  gjdJian(num1,num2);
        //统计相减的次数,高精度相加,每次在 result 的个位加 1 
        //如果考虑相除两个数的结果是低精度,由可以直接使用 count++
  for(int i=1; i<=result[0]; i++) {
   //对应位相加
   result[i]=result[i]+tem[i]+temp;
   //存储进位
   temp=result[i] / 10;
   //存储余数
   result[i] %=10;
  }
 }
}
int main(int argc, char** argv) {
 int num1[101]= {0};
 int num2[101]= {0};
 int result[101]= {0};
 stringToNumber(num1);
 stringToNumber(num2);
 gjdChu(num1,num2,result);
 for(int i=result[0]; i>0; i--) {
  if(result[i]!=0)
   cout<<result[i];
 }
 cout<<endl;
 for(int i=num1[0]; i>0; i--) {
  cout<<num1[i];
 }
 return 0;
}

输出结果:

3. 总结

本文讲解了高精度相加、相减、相乘、相除操作。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-11-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程驿站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
C语言实现大数运算[通俗易懂]
由于整型数的位数有限,因此整型数不能满足大整数(超长整数)的运算要求 。大整数计算是利用字符串来表示大整数,即用字符串的一位字符表示大整数的一位数值,然后根据四则运算规则实现大整数的四则运算。
全栈程序员站长
2022/11/10
1.9K0
C语言实现大数运算[通俗易懂]
运筹学与最优化理论基础——高精度加减乘除(C++实现)
在写单纯形算法时,发现了高精度分数存在bug与不足,所以必须对相关函数进行修改。主要有bug的函数是string DIVIDE_INT(string str1,string str2,int flag),之前是为了运算简单起见,对于特殊除数与被除数进行特定的判断来减小计算复杂度,但是发现存在逻辑bug,判断这些条件之后,未直接返回结果使得程序仍然会执行正常的除法操作,因此对这个bug进行修正。同时为了方便之后的单纯型算法的编写,在此又特意添加两个函数int Compare2Zero()和int Compare2Fraction(Fraction fraction),分别来比肩与0和分数fraction的大小。 在写两阶段单纯形算法时,发现了高精度分数中缺少相关取反和取倒数等接口导致代码出现大量重复代码。因此再次对高精度分数类进行修改。主要实现了分数取反和分数取倒数,并将整体代码进行了优化。由于两个函数过于简单,因此不对这两个函数进行讲解。
AI那点小事
2020/04/20
1.3K0
运筹学与最优化理论基础——高精度加减乘除(C++实现)
高精度算法解析与实现(c++)
在计算机科学中,高精度运算是指超出普通数据类型(如int或long long)所能表示的数值范围的计算。这些计算涉及到处理非常大的整数或浮点数,常见的应用场景包括大数加减乘除、密码学、科学计算等。在这篇博客中,我们将学习几种常见的高精度算法,并通过具体代码实现其功能,涵盖高精度加法、减法、乘法和除法。
平凡之路.
2025/02/22
1820
从零开始学算法:高精度计算
前言:由于计算机运算是有模运算,数据范围的表示有一定限制,如整型int(C++中int 与long相同)表达范围是(-2^31~2^31-1),unsigned long(无符号整数)是(0~2^32-1),都约为几十亿.如果采用实数型,则能保存最大的double只能提供15~16位的有效数字,即只能精确表达数百万亿的数.因此,在计算位数超过十几位的数时,不能采用现有类型,只能自己编程计算. 高精度计算通用方法:高精度计算时一般用一个数组来存储一个数,数组的一个元素对应于数的一位(当然,在以后的学习中为了加
Angel_Kitty
2018/04/08
1.3K0
LeetCode 43,一题学会高精度算法
今天和大家讨论的算法是高精度,对应的LeetCode是第43题。题面其实没什么好说的,以字符串的形式给定两个数字,要求返回这两个数字的乘积。之所以是以字符串的形式给数字是因为这个数字可能会非常大,题目当中给定的范围是110位的数字。对于Python来说这不是问题,但是对于C++和Java等语言来说这么大的数字是无法以int类型存储的,所以必须要使用字符串来接收。
TechFlow-承志
2020/03/23
1.2K0
信息学奥赛一本通算法(C++版)基础算法:高精度计算
高精度加法(大位相加) 1 #include <bits/stdc++.h> 2 using namespace std; 3 int main() 4 { 5 char a1[100],b1[100]; 6 int a[100],b[100],c[100];//a,b,c分别存储加数,加数,结果 7 int lena,lenb,lenc,x,i; 8 memset(a,0,sizeof(a));//数组a清零 9 memset(b,0,sizeof
Angel_Kitty
2018/04/08
7630
【算法】高精度问题
高精度:利用计算机进行数值计算,有时会遇到这样的问题:有些计算要求精度高,希望计算的数的位数可达几十位甚至几百位,虽然计算机的计算精度也算较高了,但因受到硬件的限制,往往达不到实际问题所要求的精度。我们可以利用程序设计的方法去实现这样的高精度计算。
平凡的人1
2023/10/15
2130
如何通过二进制位运算实现加减乘除
众所周知,计算机是通过 bit 位来存储数字的,因为每个 bit 位只能存储 0 或 1,因此,计算机底层的所有计算都是基于二进制来实现的。 那么,仅仅通过位运算,如何才能计算出数字的加减乘除呢?这是一个非常有意思的问题。 本文我们就来详细介绍一下。
用户3147702
2022/06/27
1.2K0
如何通过二进制位运算实现加减乘除
算法0基础之高精度加法模板+解题报告
文章目录 前言 高精度算法的实现 高精度加法 例题 前言 🤞秋名山码民的主页🤞 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 🙏作者水平很有限,如果发现错误,一定要及时告知作者 高精度算法存在的意义: 在c++中变量的最大范围也不过是64位的大小,可是在实际的数据中难免出现超出范围的,从而由字符串(数组)引申出来了高精度的计算,用字符串来模拟每一位数字,用算术模拟计算高精度加法,高精度乘法 高精度算法的实现 高精度加法 for (int i = 0; i < maxlen; ++i) { av = (
秋名山码神
2022/12/13
3430
算法基础(二)| 高精度算法详解
适用于c++,java和python没有这个问题,因为java有大整数类,python自带,默认数是无限大。
timerring
2022/09/27
8450
算法基础(二)| 高精度算法详解
高精度算法和链表
计算机最初、也是最重要的应用就是数值运算。在编程进行数值运算时,有时会遇到运算的精度要求特别高,远远超过各种数据类型的精度范围;有时数据又特别大,远远超过各种数据类型的极限值。这种情况下,就需要进行“高精度运算”。
楚客追梦
2023/10/18
1930
php案例:高精度计算
高精度运算,是指参与运算的数(加数,减数,因子……)范围大大超出了标准数据类型(整型,实型)能表示的范围的运算。例如,求两个20000位的数的和。这时,就要用到高精度算法了。
贵哥的编程之路
2023/12/26
1730
php案例:高精度计算
(加强版)大数加减乘除,一文彻底搞定
大家好,我是bigsai!(上次发布的忘加原创并且今天的把内容扩充了一下)最近,大数加减频频登上笔试的舞台,小伙伴们在群里也分享自己遇到面试官碰到大数运算的题目,想着这么重要而简单的知识点我还没写过,那得好好和大家一起总结一下。
bigsai
2021/04/26
2.1K0
大数加减乘除,一文彻底搞定
大家好,我是bigsai!最近,大数加减频频登上笔试的舞台,小伙伴们在群里也分享自己遇到面试官碰到大数运算的题目,想着这么重要而简单的知识点我还没写过,那得好好和大家一起总结一下。
bigsai
2021/04/12
5210
js float运算精度问题
先放个前辈的文章:JavaScript数字精度丢失问题总结 今天遇到了19.99*100的问题,答案不等于1999,因为在javascript中浮点数的计算是以2进制计算的。自己写了一波解决方法(不能单纯的乘Math.pow(10,N)变成整数运算完再除掉,因为乘也会有精度问题,就像题面19.99*100不等于1999。): function formatFloat(num1,num2){ var str1 = num1.toString(); var str2 = num2.toStrin
mcq
2018/06/27
9.8K2
高精度原理介绍及代码实现
高精度算法(High Accuracy Algorithm)的出现是为了处理超大数据的数学计算问题。在一般的科学计算中,我们可能会遇到需要计算小数点后几百位甚至更多的数字,或者处理几千亿、几百亿这样的大数字。这些数字超出了标准数据类型(如整型、实型)能够表示的范围,因此无法直接在计算机中正常存储和计算。
用户11039529
2024/05/24
1550
高精度原理介绍及代码实现
【C++】高精度算法讲解
高精度运算也称之为大数运算。即:在变量运算对象的数值范围为任何数据类型所无法容纳的情况下,采用整数数组存储(用字符串表示数字)。
Karos
2023/01/03
1.4K0
【C++】高精度算法讲解
大整数乘法的详解
由于编程语言提供的基本数值数据类型表示的数值范围有限,不能满足较大规模的高精度数值计算,因此需要利用其他方法实现高精度数值的计算,于是产生了大数运算。尤其是乘法运算,下面就是大整数的乘法的过程(加 减法都一样的原理)。
全栈程序员站长
2022/09/05
1.4K0
大整数乘法的详解
C++数学与算法系列之初等数论
在日常生活中,数通常出现在标记(如公路、电话和门牌号码)、序列号和编码上。在数学里,数的定义延伸至包含如分数、负数、无理数、超越数及复数等抽象化的概念。
一枚大果壳
2022/12/20
3970
C++数学与算法系列之初等数论
​LeetCode刷题实战43:字符串相乘
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2021/01/20
4390
​LeetCode刷题实战43:字符串相乘
相关推荐
C语言实现大数运算[通俗易懂]
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验