pat乙级 1017 A除以B 模拟除法

#include <stdio.h>
#define MAX_A 1000
int A[MAX_A];
int B;   /* 除数 */
int num; /* A 被除数有多少位 */

void read_AB();
void division_print();
/******************** 读入A读如A[],和B *************************/
void read_AB()
{
    int c;

    for (num = 0; (c = getchar()) != ' '; ++num)
        A[num] = (c - '0');
    B = (getchar() - '0');
}
/*********************** 做除法,并输出 **************************/
void division_print()
{
    int d; /* 被除数  dividend*/
    int r; /* 余数 remainder */
    int Q; /**/

    if (num == 1 && A[0] < B)
    { /* A 只有一位且还小于B(除数)*/
        printf("0");
        r = A[0];
    }
    else
    {
        d = r = 0;
        for (int j = 0; j < num; ++j)
        {
            d = r * 10 + A[j]; /* 将A分解,被除数 = 上一次的余数*10 + 当前A中的某位 */
            Q = d / B;
            r = d % B;
            if (j == 0)
            {
                if (Q != 0)
                    printf("%d", Q);
            }
            else
                printf("%d", Q);
        }
    }
    printf(" ");
    printf("%d", r);
}
int main()
{
    int i;

    B = 0;
    for (i = 0; i < MAX_A; ++i)
        A[i] = 0;
    read_AB();
    division_print(); /* 一边除一边输出 */
}

 

posted @ 2023-03-02 16:27  雨中白发人  阅读(17)  评论(0)    收藏  举报