美文网首页PAT
1017.A除以B

1017.A除以B

作者: yzbkaka | 来源:发表于2018-07-26 17:50 被阅读1次

    题目描述

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

    输入描述

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

    输出描述

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

    输入例子

    123456789050987654321 7

    输出例子

    17636684150141093474 3

    代码

    #include <stdio.h>
    int main(){
       char a1[1001],a2[1001];   //因为可能有1000个数字,所以使用字符串
       int b,r=0,i,c,j=0;
       scanf("%s %d",a1,&b);
       for(i=0;a1[i]!='\0';i++){   //开始模拟笔算
          c=r*10;
          a2[j]=((a1[i]-48+c)/b)+48;   //将每一位的商数都记住
          r=(a1[i]-48+c)%b;
          j++;     //下表要增加
       }
       a2[j]='\0';
        if(a2[0]=='0'){   //如果商数的第一位是‘0’
            if(j==1){   //如果给出的数字是只有1位数
                printf("%c %d",a2[0],r);
               }
            else{
                printf("%s %d",a2+1,r);   //如果给出的不止一位数
               }
           }
           else{    //如果商数的第一位不是‘0’
            printf("%s %d",a2,r);
           }
       return 0;
    }
    

    我的分析

    这道题的题目很短,但是却是很费时间来思考的。一开始看到题时,我以为就是简单的除法运算,考虑到可能给出的数值较大,所以定义时使用的是long long,但是在提交后才发现我是too young too simple,系统给出的最大是有1000个数字的超大的数呀!,所以才发现这道题不能来用整型来计算,要用数组。我写这道题的整体思路是根据在纸上的笔算来进行的,这里可能无法用文字解释清楚,但是如果自己动手笔算再结合着给出的代码,就一定能够理解的

    相关文章

      网友评论

        本文标题:1017.A除以B

        本文链接:https://www.haomeiwen.com/subject/imapmftx.html