我是靠谱客的博主 怕黑面包,这篇文章主要介绍PAT乙级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
结尾无空行

解题思路

  1. 读入A和B;
  2. 分类计算,如果是两个一位数相除,则直接输出,不涉及余数留给下一位进行运算的情况;若不是两个一位数相除,则需要遍历A的每一位进行依次运算;
  3. 按照格式输出。

难点

本题需要注意之处有以下3点:

  1. 商若非0,那么在第一位非0位之前的0不需要输出;
  2. 余数在运算下一位时作(*10)后使用;
  3. 字符类型(char)和实际运算所使用的整型(int)之间要注意转换。

代码

#include<stdio.h>
#include<string.h>
int main(){
    char a[1001];//a是不超过 1000 位的正整数
    int i,temp,b,k = 0;//b是1位正整数,k记录c的位数
    int rem,c[1005];//rem是余数,c存放结果
    int isprint = 0;//是否有第一位非0数字输出的标记变量
    scanf("%s %d",a,&b);
    int len = strlen(a);
    if (len==1)
        printf("%d %d",(a[0]-48)/b,(a[0]-48)%b);
    else
    {
        rem = 0;
        for (i=0;i<len;i++)
        {
            temp = rem*10+a[i]-48;
            c[k++] = temp/b;
            rem = temp%b;
        }
        for (i=0;i<k;i++)
        {
            if (c[i]==0 && isprint==0)
                continue;
            else
            {
                printf("%d",c[i]);
                isprint = 1;
            }
        }
        printf(" %d",rem);
    }
    return 0;
}

最后

以上就是怕黑面包最近收集整理的关于PAT乙级1017:A除以B(20)的全部内容,更多相关PAT乙级1017内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部