PAT Basic Level 1017 A除以B C、Python


PAT B 1017 A除以B(20 分) C、Python

封面pid:76540463

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

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

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

输入样例:
123456789050987654321 7
输出样例:
17636684150141093474 3

用Python写很简单,直接算就行。

def function(A,B):
    Q,R=divmod(A,B)
    str1=str(Q)+' '+str(R)
    return(str1)

A,B=map(int,input().split(' '))
print(function(A,B))

如果需要用C语言写,要模拟除法的过程。我们用了一个数组存储被除数。每次取出被除数最前面的一位数去除以除数得到商,如果所得的数字大于0就直接输出,如果小于零说明不够除,我们从后面再取一位。及将当前数字×10再加上后一位数字,再拿去除以除数。

题目说A不超过1000位,那么A的长度可能是1到1000。要考虑长度只有一位的情况。

#include<stdio.h>
#include<string.h>
int main(){
    char num[1001];//这个字符串数组存储被除数
    int len;
    int divisor;//divisor是除数的英文
    int tmp;
    int quotient;//quotient是商的英文
    int i;
    scanf("%s %d",num,&divisor);
    len=strlen(num);
    quotient=(num[0]-'0')/divisor;
    if((quotient!=0&&len>1)||len==1){
        printf("%d",quotient);
    }
    tmp=(num[0]-'0')%divisor;
    for(i=1;i<len;i++){
        quotient=(tmp*10+num[i]-'0')/divisor;
        printf("%d",quotient);
        tmp=(tmp*10+num[i]-'0')%divisor;
    }
    printf(" %d",tmp);
    return 0;
}

文章作者: eacryo
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 eacryo !
  目录