西行寺幽幽子(恶心的高精除)

本文介绍了一个关于高精度除法的编程问题,涉及到大数运算的处理方式。具体讲述了如何通过自定义的数据结构和算法来解决两个大数相除的问题,并提供了一段C++代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

在幻想乡,西行寺幽幽子是以贪吃闻名的亡灵。不过幽幽子可不是只会吃,至少她还管理着亡灵界。话说在幽幽子居住的白玉楼有一颗常年不开花的樱树——西行妖。幽幽子决定去收集人间的春度,聚集起来让西行妖开花。很快,作为幽幽子家园艺师的魂魄妖梦收集到了 M 个单位的春度。并且在这段时间里,幽幽子计算出要让西行妖开出一朵花需要 N 个单位的春度。现在幽幽子想要知道,使用所有的春度,能够让西行妖开出多少朵花。

输入格式

第 1 行:一个正整数 M
第 2 行:一个正整数 N
N,M 的位数不超过 L,L 的范围在题目后面给出

输出格式

第 1 行:一个整数 ans,表示能开出花的朵数

输入样例

73861758
12471

输出样例

5922

数据范围

对于 60%的数据:L <= 2,000 且 ans <= 2,000
对于 100%的数据:L <= 20,000 且 ans <= 2,000,000,000

就是一个高精除,实在是恶心

代码

#include<iostream>
#include<cstring>
using namespace std;
int la,lb,lc,a[30001],b[30001],c[30001],tmp[30001],i,x,j,d;
string t,s1,s2;
void print(int a[]) {
    for(int i=a[0];i>0;i--){cout<<a[i];}
    return;
}
int compare(int a[],int b[])   {
    if(a[0]>b[0]) return 1;
    if(a[0]<b[0]) return -1;
    for(int i=a[0];i>0;i--) {
        if(a[i]>b[i]) return 1;
        if(a[i]<b[i]) return -1;
    }
    return 0;
}
void numcpy(int p[],int q[],int det){
    for(int i=1;i<=p[0];i++)
      q[i+det-1]=p[i];
    q[0]=p[0]+det-1;
}
void jian(int a[],int b[]) { 
    int flag,i; 
    flag=compare(a,b);
    if(flag==0){a[0]=0;return;}
    if(flag==1) {
        for(i=1;i<=a[0];i++) {
          if(a[i]<b[i])
             a[i+1]--,a[i]=a[i]+10;
        a[i]=a[i]-b[i];}
        while(a[0]>0&&a[a[0]]==0){a[0]--;}
        return;
    }
}
void chugao(int a[],int b[],int c[]) {
    c[0]=a[0]-b[0]+1;
    for(int i=c[0];i>0;i--) {
        memset(tmp,0,sizeof(tmp));
        numcpy(b,tmp,i);
        while(compare(a,tmp)>=0)
          c[i]++,jian(a,tmp);
    }
    while(c[0]>0&&c[c[0]]==0) c[0]--;
    return;
}
void adib(string a1,string b1) {
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    memset(c,0,sizeof(c));
    a[0]=a1.size();
    for(i=1;i<=a[0];i++) a[i]=a1[a[0]-i]-'0';
    b[0]=b1.size();
    for(i=1;i<=b[0];i++) b[i]=b1[b[0]-i]-'0';
    chugao(a,b,c);
    print(c);
    return;
}
int main() {
    cin>>s1>>s2;
    adib(s1,s2);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值