• 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;
    } 
     
  • 相关阅读:
    ubuntu+VS code+launch.json+task.json
    C++——运行时类型识别RTTI
    C++——模板
    C++——class类和struct结构体的唯一区别
    C++——右值引用
    C++——智能指针
    身份证号码格式检测
    PHP获取图片主题颜色
    PHP 压缩图片质量
    redis3.2装完后 其它机子访问爆protocol error, got 'n' as reply type byte
  • 原文地址:https://www.cnblogs.com/shenben/p/5878072.html
Copyright © 2020-2023  润新知