PAT

1017.A除以B

2018-07-26  本文已影响1人  yzbkaka

题目描述

本题要求计算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个数字的超大的数呀!,所以才发现这道题不能来用整型来计算,要用数组。我写这道题的整体思路是根据在纸上的笔算来进行的,这里可能无法用文字解释清楚,但是如果自己动手笔算再结合着给出的代码,就一定能够理解的

上一篇 下一篇

猜你喜欢

热点阅读