0基础学算法 第五弹 填坑
- 这个填坑系列,是为了能够解决大家在前面的疑点,如果你在前面有哪些疑点,可以加入QQ群,群名称叫球君博客的填坑群,我要是在博客里有什么不足的,或着有什么讲的不清楚的地方,可以进去发表建议,好今天这期我就来填坑了,昨天有人说第四弹的乘法思路没讲清楚,所以今天我重新讲讲。
乘法的思路简单的说就是还是依靠竖式的原理,有第二个数的第一位乘上上面的全部数,再让第二个数的第二位乘上上面所有的数,这个操作用一个嵌套循环就可以完成了,再是进位问题,这个进位和加法有些不同,这里进位的思路是先不进位,将没进过位的数,也就是一个两位数存在一个数组的格子里,然后在后面部分对每一位去mod 9,来去取要进位的部分,往前面一位加上进位的数,然后再在这一位剪掉进了位的部分,然后执行相同的操作对下一位,这里给出个流程图做说明。
下面👇,是完整代码
#include <bits/stdc++.h> #define N 2001 using namespace std; int main(){ string s1,s2; int a[N],b[N],c[2*N],la,lb; cin>>s1>>s2; la = s1.length(),lb=s2.length(); //cout<<la<<lb; for(int i=0;i<la;i++) a[i]=s1[la-i-1]-'0'; for(int i=0;i<lb;i++) b[i]=s2[lb-i-1]-'0'; for(int i=0;i<la;i++) for(int j=0;j<lb;j++) c[i+j]+=a[i]*b[j]; int l=la+lb; //cout<<l; //return 0; for(int i=0;i<l;i++) { c[i+1]+=c[i]/10; c[i]%=10; } while(c[l-1]==0&&l>1) l--; for(int i=l-1;i>=0;i--) { cout<<c[i]; } return 0; }
显然我的坑明显不止这么多,我反思,我们继续
还是第四弹高精度(在这么多错),这个位置
这里说的有点问题,不是编译器,是c++的ide,还有一个问题
下面说的是第三弹的,我在第三弹给出的不是全部的队列操作,但常用的就是那些了
还有,平常我发的博文可能有的底发不严谨,大家可以去我的QQ群里说,群号1031467671,
如果你欣赏我的文章,麻烦点个赞,再关注➕一下我,如果有什么我没说到的坑,请进群说明或留言