PAT1017 A除以B

1017 A除以B (20)(20 分)

本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,使得A = B * Q + R成立。
输入格式:
输入在1行中依次给出A和B,中间以1空格分隔。
输出格式:
在1行中依次输出Q和R,中间以1空格分隔。
输入样例:

123456789050987654321 7

输出样例:

17636684150141093474 3




解析

挺好的题,大整数运算。大整数必须用字符串输入和存储。注意字符数字和数字。比如‘0’0
这里写图片描述
思考下你小学是怎么计算除法的,把思路翻译成程序,就行了。



完整代码:

#include<stdio.h>
#include<string.h>
int main()
{
  char numlist[1001];
  int B=0;
  char Q[1001];
  int R=0;
  scanf("%s %d",numlist,&B);
  int length = strlen(numlist);

  int bit=0;
  int num=0;
  int i=0;
  int j=0;
  for(; i<(length-1) ;i++){
    num = numlist[i]-'0'+bit*10;
    if(num<B){
      bit=num;
      if(i != 0)
        Q[j++]='0';
    }
    else{
      Q[j++]= num/B+'0';
      bit=num%B;
    }
  }
  num = numlist[i]-'0'+bit*10;
  Q[j++]=num/B+'0';
  R=num%B;
  Q[j]='\0';
  printf("%s %d",Q,R);

  return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_41256413/article/details/81005765