[codevs3118]高精度除法<高精度>
题目链接: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
说白了,高精度除法就是执行减法,看从被除数中最多可以减去多少个除数,所以高精度除法就是多次高精度减法
高精度除法模板:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<queue>
#include<cstdlib>
#include<cmath>
#define maxn 1005
using namespace std; int a1[maxn],a2[maxn],a3[maxn],a4[maxn];
int len1,len2;
char s1[maxn],s2[maxn]; int check(int a[],int b[]){
if(a[]<b[])return ;
if(a[]>b[])return ;
for(int i=a[];i>=;i--){
if(a[i]>b[i])return ;
if(a[i]<b[i])return ;
}
return ;
} void _minus(int a[],int b[]){
for(int i=;i<=a[];i++){
if(a[i]<b[i]){
a[i]+=;a[i+]--;
}
a[i]-=b[i];
}
while(a[a[]]==&&a[]>)//余数的位数
a[]--;
} int main(){
scanf("%s%s",s1+,s2+);
len1=strlen(s1+);
len2=strlen(s2+);
for(int i=;i<=len1;i++)a1[i]=s1[len1-i+]-'';
for(int i=;i<=len2;i++)a2[i]=s2[len2-i+]-'';
a1[]=len1;a2[]=len2;
a4[]=len1-len2+;
for(int i=a4[];i>;i--){
memset(a3,,sizeof(a3));
for(int j=;j<=a2[];j++){
a3[j+i-]=a2[j];//移i位
}
a3[]=a2[]+i-;
while(check(a1,a3)){
a4[i]++;_minus(a1,a3);
}
}
while(a4[a4[]]==&&a4[]>)//商的位数
a4[]--;
for(int i=a4[];i>=;i--){
printf("%d",a4[i]);
}
/*
3886218
56322
out:69
*/
}
[codevs3118]高精度除法<高精度>的更多相关文章
- 中石油-高精度除法-java版
问题 G: [高精度]高精度数除以低精度数I 时间限制: 1 Sec 内存限制: 512 MB提交: 19 解决: 15[提交][状态][讨论版] 题目描述 修罗王聚集了庞大的暗元素以施展隐匿魔法 ...
- 使用java求高精度除法,要求保留N位小数
题目要求是高精度除法,要求保留N位小数(四舍五入),并且当整数部分为0时去除0的显示 import java.math.BigDecimal; import java.util.Scanner; pu ...
- POJ 2325 Persistent Numbers#贪心+高精度除法
(- ̄▽ ̄)-* 这道题涉及高精度除法,模板如下: ]; ];//存储进行高精度除法的数据 bool bignum_div(int x) { ,num=; ;s[i];i++) { num=num*+ ...
- 第三周PTA笔记 回文数+A-B(大数减法)+高精度除法+数楼梯(大数加法)
回文数 对于一个自然数n,若将n的各位数字反向排列所得的数n1与n相等,则称n为回文数,例如2332. 若给定一个N( 2<=N<=16)进制数M(M的长度在一百位以内),如果M不是回文数 ...
- c++ 超大整数除法 高精度除法
c++ 超大整数除法 高精度除法 解题思路 计算a/b,其中a为大整数,b为普通整数,商为c,余数为r. 根据手算除法的规则,上一步的余数记为r,则本次计算的被除数为t=r*10+被除数的本位数值a[ ...
- 【高精度】高精度分数[c++]
[高精度]高精度分数 时间限制: 1 Sec 内存限制: 64 MB 题目描述 "人无远虑,必有近忧"是修罗王一直以来恪守的信条,为了以防万一,他在很久以前就将<魔法宝典&g ...
- 【高精度】高精度数除以低精度数I
问题 G: [高精度]高精度数除以低精度数I 时间限制: 1 Sec 内存限制: 512 MB提交: 173 解决: 71[提交] [状态] [讨论版] [命题人:] 题目描述 修罗王聚集了庞大的 ...
- 【noi 2.6_9288】&【hdu 1133】Buy the Ticket(DP / 排列组合 Catalan+高精度除法)
题意:有m个人有一张50元的纸币,n个人有一张100元的纸币.他们要在一个原始存金为0元的售票处买一张50元的票,问一共有几种方案数. 解法:(学习了他人的推导后~) 1.Catalan数的应用7的变 ...
- 华南理工大学“三七互娱杯”程序设计竞赛(重现赛)( HRY and array 高精度除法模板)
题目链接:https://ac.nowcoder.com/acm/contest/874/D 题目大意:给你两个数列a和b然后对a可以进行排列,对b可以任意排列,问你sigma(a(i)*b(i))的 ...
随机推荐
- HandlerInterceptor ModelAndView null springMVC @ResponseBody
本文来源https://blog.csdn.net/whiteforever/article/details/77457109 用了@RestController或者@ResponseBody注解之后 ...
- Py基础之函数
'''函数是指一类同类事物的抽象,而且这种抽象可以拓展,并且可以用在同一类事物上'''print (abs(-100),abs(100)) #abs函数是python内置的函数,可以用来求绝对值#pr ...
- H5页面通用头部设置
见到很多人写H5页面都不设置头部,不忍直视,于是整理一篇文章,不定期更新,为了让自己显得专业一点,也为了方便自己复制粘贴 一般来说必须设置项 <!-- 页面编码 --> <meta ...
- 教你如何使用css隐藏input的光标
今天公司的ui突然跑过来问我一个问题:"如何在不影响操作的情况下,把input的光标隐藏了?". 我相信很多人会跟我一样,觉得这是个什么狗屁需求,输入框不要光标这不是反人类吗?可惜 ...
- Tomcat8优化
一.Tomcat8优化 Tomcat服务器在JavaEE项目中使用率非常高,所以在生产环境对Tomcat的优化也变得非常重要了. 对于Tomcat的优化,主要是从2个方面入手,一是,Tomcat自身的 ...
- 最新IntelliJ IDEA 2019.3版本永久激活,一步到位!
简单介绍一下什么是IDEA? IDEA全称 IntelliJ IDEA,是java编程语言开发的集成环境.IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手.代码自动提示.重构. ...
- 第一个Hystrix程序 Hystrix 一
1.导入jar包 <dependencies> <dependency> <groupId>com.netflix.hystrix</groupId> ...
- Django中使用CORS实现跨域请求
跨域请求: 请求url包含协议.网址.端口,任何一种不同都是跨域请求. 1.安装cors模块 pip install django-cors-headers2.添加应用 INSTALLED_ ...
- 死磕Lambda表达式(三):更简洁的Lambda
我们都是阴沟里的虫子,但总还是得有人仰望星空.--<三体> 在之前的文章中介绍了Lambda表达式的基本语法和正确使用姿势,这次我来介绍一些Lambda更简洁的用法. 欢迎关注微信公众号: ...
- 【Android】Retrofit源码学习
使用Retrofit的流程 通过Builder创建Retrofit对象: Retrofit retrofit = new Retrofit.Builder().baseUrl("" ...