3118 高精度练习之除法

3118 高精度练习之除法

时间限制: 1 s

空间限制: 128000 KB

题目等级 : 钻石 Diamond

题解

查看运行结果

题目描述 Description

给出两个正整数A和B,计算A/B整数部分的值。保证A和B的位数不超过500位。

输入描述 Input Description

读入两个用空格隔开的正整数

输出描述 Output Description

输出A/B整数部分的值

样例输入 Sample Input

15 4

样例输出 Sample Output

3

数据范围及提示 Data Size & Hint

两个正整数的位数不超过500位

分类标签 Tags 点此展开

高精度

题解:

高精度除高精度的模板

AC代码:

#include<cstdio>
#include<cstring>
using namespace std;
const int N=2e3+10;
char s1[N],s2[N];
int p,a1[N],a2[N],a3[N],a4[N];
inline bool bi(int a[],int b[]){
    if(a[0]<b[0]) return 0;
    if(a[0]>b[0]) return 1;
    for(int i=a[0];i;i--){
        if(a[i]<b[i]) return 0;
        if(a[i]>b[i]) return 1;
    }
    return 1;
}
inline void jian(int a[],int b[]){
    for(int i=1;i<=a[0];i++){
        if(a[i]<b[i]){
            a[i]+=10;
            a[i+1]--;
        }
        a[i]-=b[i];
    }
    for(;!a[a[0]]&&a[0]>1;a[0]--);
}
int main(){
    scanf("%s%s",s1,s2);
    int len1=strlen(s1);
    int len2=strlen(s2);
    for(int i=len1-1;i+1;i--) a1[++p]=s1[i]-‘0‘;p=0;
    for(int i=len2-1;i+1;i--) a2[++p]=s2[i]-‘0‘;p=0;
    a1[0]=len1;
    a2[0]=len2;
    a4[0]=len1-len2+1;
    for(int i=a4[0];i;i--){
        memset(a3,0,sizeof a3);
        for(int j=1;j<=a2[0];j++) a3[j+i-1]=a2[j];
        a3[0]=a2[0]+i-1;
        while(bi(a1,a3)) a4[i]++,jian(a1,a3);
    }
    for(;!a4[a4[0]]&&a4[0]>1;a4[0]--);
    for(int i=a4[0];i;i--) printf("%d",a4[i]);
    return 0;
} 
时间: 2024-11-08 19:14:15

3118 高精度练习之除法的相关文章

高精度之大数除法

大数除法说的比较少或许不像加法减法那样简单,或许是用的不太多.到底怎么我也不知道. 反正你会了加法减法,乘法而不会除法,就像是,打开电脑而不玩游戏,心里难受. 我是从看到了大神博客后学习了一下. http://blog.csdn.net/hitwhylz/article/details/9700935 博客中讲的很详细 让人一看就懂,我很佩服这位同学.果断的关注了. 毕竟别人写的是别人的. 自己写的才是自己的 .于是我就捋了捋,模仿这写了一遍: 思想就是:用减法来代替除法,但是一次一次的减太慢,

20170726测试

终于有水一点的题了: Day1: 第1题 谜题首先请解以下谜题:车下的数字是什么? -----------------------图被吃掉了---------------------------------- 正确的答案是87 .这道题对小龙大犇来说太轻松了,于是他想加强难度来考考你:对于给定的长度N,能否获得刚好长度为N的数列,使数列中的每个数经过翻转恰好是连续的数,如N==3时,数列 11 01 60 是合法的.数字的翻转符合以下规定:1.0.8翻转后是其本身:6和9翻转后互相转变:其他数字

POJ 2084 Game of Connections(卡特兰数)

卡特兰数源于组合数学,ACM中比较具体的使用例子有,1括号匹配的种数.2在栈中的自然数出栈的种数.3求多边形内三角形的个数.4,n个数围城圆圈,找不相交线段的个数.5给定n个数,求组成二叉树的种数…… 此题就是第4个样例,是裸卡特兰数,但是这里牵扯的大数,可以使用java的大数类解决,但是我这里使用高精度乘法和除法模拟的(主要是java不会). 此处的递推式为H[1] = 1:H[n] = H[n-1]*(4*n-2)/(n+1){n>=2}:代码如下: 需要注意输出的形式,我这里的进制是100

c++ 普通高精乘

//第一次提交全错了,太过相信自己了. //给我教训是注意循环后变量的值,和pascal不一样. //就不贴错误代码了. //codevs3118 高精度练习之除法 #include<cstdio>#include<cstring>char s1[600],s2[600];int a1[600],a2[600],a3[1000]={0},len1,len2,len3,i,j;int main(){ scanf("%s",s1); scanf("%s&q

写给自己看的模板

这是写给自己看的模板……当然有需要的人也可以直接拿走 1.封装好的高精度模板 注意:算法的主要耗时在于高精度乘法.除法和乘方.其中高精度乘方有快速幂优化,常数大致是乘法的5~10倍.除法是用二分写的效率较低,大概是乘法的20~30倍,能不用尽量不用 #define mx 300 struct gaojing{ int len; int a[mx+10]; }zero,one; inline void set0(gaojing &s)//高精清零 { s.len=1; for (int i=1;i

c++ 普通高精除高精

//codevs3118 高精度练习之除法 //打出了高精除高精,内心有点小激动. //还记得已开始学的时候非常难打 #include<cstdio>#include<cstring>char s1[600],s2[600];int a1[600],a2[600],a3[600],a4[600],len1,len2,len3,i,j;int bi(int a3[],int a4[]){ if(a3[0]<a4[0]) return 0; if(a3[0]>a4[0])

【算法:1】高精度除法

高精度除法,我用高精度减法来模拟 #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> #include<string> using namespace std; inline int read() { int x=0,f=1;char ch=getchar();

中石油-高精度除法-java版

问题 G: [高精度]高精度数除以低精度数I 时间限制: 1 Sec  内存限制: 512 MB提交: 19  解决: 15[提交][状态][讨论版] 题目描述 修罗王聚集了庞大的暗元素以施展隐匿魔法,该魔法施展后将对其周边的时空产生隐匿效果,当然,隐匿的效果好坏取决于是否将暗元素平均地分配在其周边时空,显然这涉及高精度除法的编程.考虑到邪狼的理解能力,修罗王不得不先将问题简化为:输入一被除数(位数≤5000),输入一除数(整型数据范围内),输出整数商,忽略小数. 输入 共两行,第1行为一个数字

poj 2635 The Embarrassed Cryptographer 筛素数+高精度除法

题意: 给K(<10^100),L(<10^6),求K小于L的最小素因子并输出,如果没有则输出GOOD. 分析: 枚举小于L的素数用高精度除法判断是否是因子,关键是怎么高效筛素数,先给一种比较慢的筛法: primes[max_prime_num],num=0; memset(vis,0,sizeof(vis)) for(int i=2;i<maxL;++i) if(vis[i]==0){ prime[num++]=i; for(int j=2*i;j<maxL;j+=i) vis[