码迷,mamicode.com
首页 > 其他好文 > 详细

Luogu2005 A/B Problem II

时间:2020-07-29 21:16:06      阅读:54      评论:0      收藏:0      [点我收藏+]

标签:++   str   math   除法   tchar   amp   cst   put   减法   

https://www.luogu.com.cn/problem/P2005

高精度除法

模板题,居然发现还没填上小学时高精除高精的坑(一定是我太菜了

用减法模拟除法,只要大于除数,就暴力减,这一位的\(ans++\)

\(C++ Code:\)

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#define N 100005
using namespace std;
int alen,blen,a[N],b[N],c[N],t[N],p[N],q[N];
char A[N],B[N];
bool cop(int *a,int *b)
{
    if (a[0]<b[0])
        return false;
    if (a[0]>b[0])
        return true;
    for (int i=1;i<=a[0];i++)
        if (a[i]^b[i])
            return a[i]>b[i];
    return true;
}
void del(int a[],int *b)
{
    p[0]=a[0];
    for (int i=1;i<=a[0];i++)
        p[i]=a[a[0]-i+1];
    for (int i=1;i<=a[0];i++)
    {
        if (p[i]<q[i])
            p[i]+=10,p[i+1]--;
        p[i]-=q[i];
    }
    while (!p[p[0]]&&p[0]!=1)
        p[0]--;
    a[0]=p[0];
    for (int i=1;i<=a[0];i++)
        a[i]=p[a[0]-i+1];
}
void cf(int *a,int *b)
{
    for (int i=1;i<=alen;i++)
    {
        t[++t[0]]=a[i];
        while (cop(t,b))
        {
            del(t,b);
            c[i]++;
        }
    }
    bool flag=true;
    for (int i=1;i<=alen;i++)
        if (flag&&!c[i])
            continue; else
            {
                flag=false;
                putchar(c[i]+‘0‘);
            }
    if (flag)
        putchar(‘0‘);
    putchar(‘\n‘);
}
int main()
{
    scanf("%s%s",A+1,B+1);
    alen=strlen(A+1),blen=strlen(B+1);
    a[0]=alen,b[0]=blen;
    for (int i=1;i<=alen;i++)
        a[i]=A[i]-‘0‘;
    for (int i=1;i<=blen;i++)
        b[i]=B[i]-‘0‘;
    for (int i=1;i<=b[0];i++)
        q[i]=b[b[0]-i+1];
    cf(a,b);
    return 0;
}

Luogu2005 A/B Problem II

标签:++   str   math   除法   tchar   amp   cst   put   减法   

原文地址:https://www.cnblogs.com/GK0328/p/13399032.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!