博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[codevs3118]高精度除法<高精度>
阅读量:6265 次
发布时间:2019-06-22

本文共 1687 字,大约阅读时间需要 5 分钟。

题目链接:http://codevs.cn/problem/3118/

为了做一道名为国王游戏的贪心,我跑来学习了高精度除法。。。。相传,高精度除法是高精度四个基本运算最难的

但事实上,高精度除法可以看成其他高精度的组合。。。

我们班一位大佬告诉我,对于高精度除法这类的题,他一直都是二分出这个商,然后高精度乘法来check一下。。。。

当然这是方法之一。。。我在这道题用的方法是高精度减法来做高精度除法

 

【步骤】

1.找到除数与被除数相差的位数并记录下。。。设相差了x位,则除数与被除数的商最大为x+1位数。。。这个结论举个例子就知道了

2.然后我们从x+1位开始做。。让除数扩大10^x倍,变成和被除数相同的位数,然后比较大小,如果能减去就减去,设减去了i次,则商的x+1位为i

在这个地方我们用例子来说明:

3886218:被除数

56322:除数

3886218<56322*100不执行减法操作。。。3886218>56322*100,执行减法,可以减去6个56322*10变成506898

506898>56322,并且可以减去9个56322,变成0 ,所以商就是6*10+9,余数为0

 

说白了,高精度除法就是执行减法,看从被除数中最多可以减去多少个除数,所以高精度除法就是多次高精度减法

高精度除法模板:

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #define maxn 1005 9 using namespace std;10 11 int a1[maxn],a2[maxn],a3[maxn],a4[maxn];12 int len1,len2;13 char s1[maxn],s2[maxn];14 15 int check(int a[],int b[]){16 if(a[0]
b[0])return 1;18 for(int i=a[0];i>=1;i--){19 if(a[i]>b[i])return 1;20 if(a[i]
1)//余数的位数33 a[0]--;34 }35 36 int main(){37 scanf("%s%s",s1+1,s2+1);38 len1=strlen(s1+1);39 len2=strlen(s2+1);40 for(int i=1;i<=len1;i++)a1[i]=s1[len1-i+1]-'0';41 for(int i=1;i<=len2;i++)a2[i]=s2[len2-i+1]-'0';42 a1[0]=len1;a2[0]=len2;43 a4[0]=len1-len2+1;44 for(int i=a4[0];i>0;i--){45 memset(a3,0,sizeof(a3));46 for(int j=1;j<=a2[0];j++){47 a3[j+i-1]=a2[j];//移i位 48 }49 a3[0]=a2[0]+i-1;50 while(check(a1,a3)){51 a4[i]++;_minus(a1,a3);52 }53 }54 while(a4[a4[0]]==0&&a4[0]>1)//商的位数55 a4[0]--;56 for(int i=a4[0];i>=1;i--){57 printf("%d",a4[i]);58 } 59 /*60 388621861 5632262 out:6963 */64 }
View Code

 

转载于:https://www.cnblogs.com/Danzel-Aria233/p/7685064.html

你可能感兴趣的文章
Ubuntu菜鸟入门(九)—— 支付宝支付控件安装
查看>>
什么是 SRS 呢?在我们大部分的音频播放器里都内欠有这种音效。
查看>>
对/etc/rc.d/init.d目录的一点理解(转)
查看>>
c#使用params重载方法
查看>>
浅析C# 中object sender与EventArgs e
查看>>
遇到Audio/Speech相关问题,如何抓取log
查看>>
数学之路(3)-机器学习(4)-专家系统(1)
查看>>
Android中常用单位dp,px,sp之间的相互转换
查看>>
C++线性方程求解
查看>>
nginx负载均衡的实现
查看>>
Oracle PL/SQL之LOOP循环控制语句
查看>>
Webkit内核的浏览器中用CSS3+jQuery实现iphone滑动解锁效果(译)
查看>>
Can't create handler inside thread that has not called Looper.prepare()
查看>>
MDaemon运行六年方法
查看>>
SQL SERVER 存储过程应用
查看>>
Locale ID (LCID) Chart 区域设置ID
查看>>
Microsoft Windows Scripting Self-Paced Learning Guide
查看>>
Windows Phone Background Agent杂谈
查看>>
AJAX POST&跨域 解决方案 - CORS(转载)
查看>>
Vim中的swp文件
查看>>