其他分享
首页 > 其他分享> > PAT (Basic Level) Practice || 1017 A除以B (20 分)

PAT (Basic Level) Practice || 1017 A除以B (20 分)

作者:互联网

题目描述:

本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。

输入格式:

输入在一行中依次给出 A 和 B,中间以 1 空格分隔。

输出格式:

在一行中依次输出 Q 和 R,中间以 1 空格分隔。

输入样例:

123456789050987654321 7

输出样例:

17636684150141093474 3

解题思路:

本题需要我们模拟一下做除法题时的思路(因为给出A是1000位的正整数数,计算机不允许任何类型的变量存放这么大的数):从被除数的最高位开始除起,若该位小于除数则与下一位合成一个两位数进行运算,运算得余数与下一位结合继续运算,若整除则继续下一位运算,直到被除数运算至末尾为止。

所以需要我们进行循环,如果被除数该位数值大于除数,则输出一个除得的结果,若小于则把这个数乘10与下一位相加再除,此位写0。到第一个不为0的数开始输出,若没有不为0的则说明除不开,需要输出一个0。最后输出余数即可。

下面是我AC后的代码:

#include<stdio.h>
#include<string.h>

int main()
{
    int i, w=0, x=0, r=0, k=0;
    char num[1010];
    memset(num, 0, sizeof(num));
    scanf("%s%d", num, &x);
    w = strlen(num);
    for(i=0;i<w;i++)
    {
        if((r*10+num[i]-48) >= x)
        {
            printf("%d", (r*10+num[i]-48)/x);
            r = (r*10+num[i]-48)%x, k=1;
        }
        else
        {
            if(k) printf("0");
            r = num[i]-48;
            continue;
        }
    }
    if(!k) printf("0");
    printf("\x20%d\n", r);
    return 0;
}

 

标签:输出,PAT,运算,Level,Practice,num,printf,被除数,10
来源: https://blog.csdn.net/qq_54515850/article/details/117753940