【题目描述】

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

【输入】

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

【输出】

输出商和余数。

【输入样例】

1231312318457577687897987642324567864324567876543245671425346756786867867867
1231312318767141738178325678412414124141425346756786867867867

【输出样例】

999999999748590
179780909068307566598992807564736854549985603543237528310337
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;

int a[101], b[101], c[101], d;

void init(int a[]) {
    string s;
    cin >> s;                        
    a[0] = s.length();                
    for (int i=1; i<=a[0]; i++) {
        a[i] = s[a[0]-i] - 48;        
    }     
}

void print(int a[]) {        
    if (a[0] == 0) {
        cout << 0 << endl;
        return;
    }
    for (int i=a[0]; i>=1; i--) {
        cout << a[i];
    }
    cout << endl;
    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>=1; 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 = compare(a, b);         
    if (flag == 0)  {                
        a[0] = 0;
        return;
    }
    if (flag == 1) {                
        for (int i=1; i<=a[0]; i++) {
            if (a[i] < b[i]) {             
                a[i+1]--;                
                a[i] += 10;
            }
            a[i] -= b[i];
        }
        while (a[0]>0 && a[a[0]]==0) {
            a[0]--;                         
        } 
        return; 
    }                 
}

void chugao(int a[], int b[], int c[]) {
    int tmp[101];
    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;
}

int main() {
    memset(a, 0, sizeof(a));
    memset(b, 0, sizeof(b));
    memset(c, 0, sizeof(c));
    
    init(a);
    init(b);
    
    chugao(a,b,c);
    
    print(c);
    print(a);
    
    return 0;
}

 

posted on 2022-06-19 17:12  禹城我的家  阅读(471)  评论(0编辑  收藏  举报