搜索
热搜: NOIP OIer 神牛
查看: 4|回复: 0

1201

[复制链接]

主题

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 昨天 20:50 | 显示全部楼层 |阅读模式
#include<iostream>
#include<cstring>
#include<string>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;

#define MAXLENGTH  5000

int A[MAXLENGTH]={0};//被除数
int B[MAXLENGTH]={0};//除数
int C[MAXLENGTH]={0};//余数
int Ans[MAXLENGTH]={0};//商
int LengthA,LengthB,LengthC,LengthAns;//被除数、除数、余数、商的位数

void ReadData(int *A,int &Len)
{
    string str;
    cin>>str;
    Len=str.length();//获取长度
    for(int i=0;i<Len;i++)
    {
        A[i]=str[i]-'0';//字符转变为数字
    }
    reverse(A,A+Len); //位数翻转
}

/*比较余数C与除数B的大小*/
bool cmp()
{
    if(LengthC == LengthB)
    {
        for(int i=LengthC-1;i>=0;i--)
        {
            if(C[i] != B[i])
                return C[i]>B[i];
        }
        return true;
    }

    return LengthC>LengthB;
}

/*C减B*/
void Minus()
{
    int c=0;//借位
    for(int i=0;i<LengthC;i++)
    {
        C[i]=C[i]-B[i]-c;
        if(C[i]<0)
        {
            C[i]+=10;
            c=1;
        }
        else
        {
            c=0;
        }
    }
    while(LengthC>1 && C[LengthC-1]==0)
        LengthC--;
}

int main()
{
    ReadData(A,LengthA);
    ReadData(B,LengthB);

    LengthC=0;
    for(int i=LengthA-1;i>=0;i--)
    {
        for(int j=LengthC;j>=1;j--)
            C[j]=C[j-1];    //移位

        C[0]=A[i];
        LengthC++;

        while(cmp())//此时C大于B,进行减法操作
        {
            Minus();
            Ans[i]++;
        }
    }

    LengthAns = LengthA;
    while(LengthAns>1 && Ans[LengthAns-1]==0)
        LengthAns--;//商的位数

    /*输出商*/
    for(int i=LengthAns-1;i>=0;i--)
    {
        cout<<Ans[i];
    }
    cout<<endl;

    /*输出余数*/
    for(int i=LengthC-1;i>=0;i--)
    {
        cout<<C[i];
    }
    cout<<endl;

        return 0;
}

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

津ICP备19006949号-1 | 津公网安备12010102000465号

快速回复 返回顶部 返回列表