• codevs3118 高精度练习之除法


    题目描述 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位

    #include<bits/stdc++.h> 
    using namespace std;
    #define N 510
    char s1[N],s2[N];
    int p,a1[N],a2[N],a3[N],a4[N];
    
    inline bool compare(int a[],int b[]){
        if(a[0]<b[0])return 0;
        if(a[0]>b[0])return 1;
        for(int i=a[0];i>0;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];
        }
        while(!a[a[0]] && a[0]>1)a[0]--;
    }
    
    int main(){
        scanf("%s%s",s1,s2);
        int len1=strlen(s1),len2=strlen(s2);
        for(int i=len1-1;i>=0;i--)a1[++p]=s1[i]-'0'; p=0;
        for(int i=len2-1;i>=0;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>0;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(compare(a1,a3)){a4[i]++; jian(a1,a3);}
        }
        while(!a4[a4[0]] && a4[0]>1)a4[0]--;
        for(int i=a4[0];i>0;i--)printf("%d",a4[i]);
        return 0;
    }


  • 相关阅读:
    [AWS] Lab
    [AWS] Lab
    [AWS] Launch the VPC Wizard
    [AWS] EC2 Dashboard
    mysql .net下载
    币乎咕噜DeFi踩雷记
    量化分析师关于有限差分方法(FDM)最好的5本书
    QuantStart量化交易文集
    Exploring Market Making Strategy for High Frequency Trading: An Agent-Based Approach
    什么是信息比率?信息比率与夏普比率的差别?
  • 原文地址:https://www.cnblogs.com/codetogether/p/7066696.html
Copyright © 2020-2023  润新知