A除于B(大数相除)

简介: A除于B(大数相除)

A除以B

题目描述:

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

输入格式:

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

输出格式:

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

输入样例:

 

123456789050987654321 7

输出样例:

 

17636684150141093474 3

题目来源:PAT乙级1017

作者:CHEN, Yue

单位:浙江大学

分析:

       此题中的被除数A为不超过1000位的整数,从这句话可知用常规的整型数据类型无法存储这么大的数,所以我们应该使用字符串对大数进行处理,我们可以先分析自己在进行除法运算时的步骤,主要有以下几个特点:

1、从最高位开始除

2、相除的整数解记到相应的位数上,余数需与下一位数合并后再继续计算

代码如下:

#include<stdio.h>
#include<string.h>
int main()
{
  char a[1005];
  int b;
  while(scanf("%s %d",a,&b)!=EOF){
    int ans[1005],n=0,i=0,temp=0;
    for(i=0;i<strlen(a);i++){
      ans[n]=(a[i]-'0'+temp*10)/b;//除得整数 
      temp = (a[i]-'0'+temp*10)%b;//除得余数 
      if(ans[n]>0||i>0) n++; //结果位数加一
    }
    for(i=0;i<n;i++)
      printf("%d",ans[i]);
    printf(" ");
    printf("%d\n",temp);  
  } 
return 0;
} 
目录
相关文章
|
7月前
PAT乙级 1017大数除法
PAT乙级 1017大数除法
|
8月前
|
人工智能 算法
DAY-1 | 迭乘法、辗转相除法、试除法:最大公约数与最小公倍数问题
这段内容是一个关于计算两个数的最大公约数(Greatest Common Divisor, GCD)和最小公倍数(Least Common Multiple, LCM)的编程题目说明,包括题干、题解和方法总结。其中提到了两种方法:辗转相除法和试除法。辗转相除法通过不断用较大数除以较小数直到余数为零来求最大公约数,然后利用两数乘积除以最大公约数得到最小公倍数。试除法则是通过循环尝试两数的倍数是否同时能被两数整除来求解。在方法总结部分,还介绍了迭乘法求最小公倍数的方法。
91 0
|
8月前
大整数的因子(利用求余)
大整数的因子(利用求余)
大数的四则运算(加,减,乘,除)处理
大数的四则运算(加,减,乘,除)处理
621 0
大数的四则运算(加,减,乘,除)处理
欧几里得算法,既辗转相除法。用于计算正整数a,b的最大公约数
欧几里得算法,既辗转相除法。用于计算正整数a,b的最大公约数
113 0
两数相除
给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。 返回被除数 dividend 除以除数 divisor 得到的商。 整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2
103 0
7-41 大数的乘法 (10 分)
7-41 大数的乘法 (10 分)
82 0
算法零基础——大数四则运算
算法零基础——大数四则运算
算法零基础——大数四则运算