首页 > 其他分享 >信息学一本通 1308:【例1.5】高精除

信息学一本通 1308:【例1.5】高精除

时间:2022-09-03 11:23:29浏览次数:59  
标签:1.5 lena 高精除 int h1 1308 bs -- ans

时间限制: 1000 ms         内存限制: 65536 KB

提交数: 14866     通过数: 7293

【题目描述】

高精除以高精,求它们的商和余数。

【输入】

输入两个低于300位的正整数。

【输出】

输出商和余数。

【输入样例】

1231312318457577687897987642324567864324567876543245671425346756786867867867
1231312318767141738178325678412414124141425346756786867867867

【输出样例】

999999999748590
179780909068307566598992807564736854549985603543237528310337

#include<iostream>
#include<cstring>
#define N 310
using namespace std;
string a,b;
int as[310],bs[310],ans[310],lena,lenb;
void jian(){
    for(int i=0;i<lena;i++)as[i]-=bs[i];
    for(int i=0;i<lena;i++)
    {
        if(as[i]<0){
            as[i]+=10;
            as[i+1]--;
        }
    }
    while(as[lena-1]==0&&lena>0)lena--;
}
bool dx(){
    if(lena>lenb)return true;
    if(lena<lenb)return false;
    for(int i=lena-1;i>=0;i--){
        if(as[i]>bs[i])return true;
        if(as[i]<bs[i])return false;
    }
    return true;
}
void jy(int k)
{
    if(k==0)k=1;
    if(k!=1)
    {
        for(int i=lenb-1;i>=0;i--)
        {   
            bs[i+k-1]=bs[i];
            bs[i]=0;
        }
        lenb+=k-1;
    }
    while(dx()==true){
        jian();
        ans[k-1]++;
        int ls=k-1;
        for(int i=k-1;i<=ls;i++)
        {
            if(ans[i]>9){
                ans[i+1]++;
                ans[i]-=10;
                if(ans[i+1]>9)ls++;
            }
        }
    }
    if(k!=1)
    {
        for(int i=k-1;i<lenb;i++)
        {
            bs[i-k+1]=bs[i];
            bs[i]=0;
        }
        lenb-=k-1;
    }
}
int main(){
    cin>>a>>b;
    if(a==b){cout<<1<<endl<<0<<endl;return 0;}
    lena=a.size();
    lenb=b.size();
    for(int i=0;i<lena;i++)as[i]=a[lena-i-1]-'0';
    for(int i=0;i<lenb;i++)bs[i]=b[lenb-i-1]-'0';
    memset(ans,0,sizeof(ans));
    int k=lena-lenb;
    if(k<0){cout<<0<<endl<<a<<endl;return 0;}
    while(k>=0){
        if(k==0&&dx()==false)break;
        jy(k);
        k=lena-lenb;
    }
    int h1=301,h2=301;
    while(ans[h1]==0&&h1>0)h1--;
    while(as[h2]==0&&h2>0)h2--;
    for(int i=h1;i>=0;i--)cout<<ans[i];
    cout<<endl;
    for(int i=h2;i>=0;i--)cout<<as[i];
    cout<<endl;
}

  

标签:1.5,lena,高精除,int,h1,1308,bs,--,ans
From: https://www.cnblogs.com/sd129/p/16652202.html

相关文章

  • Problem with input() in Spyder 5.1.5 (Anaconda)
    Problemwithinput()inSpyder5.1.5(Anaconda)错误提示Traceback(mostrecentcalllast): File"C:\Users\clu\Anaconda3\lib\site-packages\qtconsole\base_fro......
  • OpenJudge 1.5.24 正常血压
    24:正常血压总时间限制:1000ms内存限制:65536kB描述监护室每小时测量一次病人的血压,若收缩压在90-140之间并且舒张压在60-90之间(包含端点值)则称之为正常,现给出某......
  • 1.4 充分条件与必要条件 1.5 全称量词和存在量词
    \({\color{Red}{欢迎到学科网下载资料学习}}\)【基础过关系列】2022-2023学年高一数学上学期同步知识点剖析精品讲义(人教A版2019)\({\color{Red}{跟贵哥学数学,so\qua......
  • Pendo for Mac v6.1.5中文版 云笔记软件
    前言哪里有轻量小巧的mac云笔记软件?PendoforMac是马克喵搜集到的一款运行在Mac平台上的一款新颖精美的mac云笔记软件。PendoMac版是Mac平台上的一款效率办公软件,Pend......
  • java compair 自动变成1.5
    在idea中使用maven项目时,每次更新或重新载入maven项目后,项目或模块依赖的JDK都会重新变成JDK1.5,就算手动设置maven项目或者模块为JDK1.8,刷新后还是会变为JDK1.5。具体表现......
  • 1.5 29 数字翻转
    描述给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例2)。输入......
  • OpenJudge1.5.17
    20:球弹跳高度的计算总时间限制:1000ms内存限制:65536kB描述一球从某一高度落下(整数,单位米),每次落地后反跳回原来高度的一半,再落下。编程计算气球在第10次落地时,共经......
  • OpenJudge1.5.17 菲波那契数列
    17:斐波那契数列总时间限制:1000ms内存限制:65536kB描述菲波那契数列是指这样的数列:数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。给出一个正整......
  • 1.5 39与7无关的数
    描述一个正整数,如果它能被7整除,或者它的十进制表示法中某一位上的数字为7,则称其为与7相关的数.现求所有小于等于n(n<100)的与7无关的正整数的平方和.输入输入为一行,......
  • 1.5 15银行利息
    描述农夫约翰在去年赚了一大笔钱!他想要把这些钱用于投资,并对自己能得到多少收益感到好奇。已知投资的复合年利率为R(0到20之间的整数)。约翰现有总值为M的钱(100到1,000,000......