每日一题 1017(大数除法)

1017 A除以B

题目描述

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

输入格式:

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

输出格式:

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

题目分析

输入样例:
123456789050987654321 7

输出样例:
17636684150141093474 3

这里的A是不超过1000位的正整数,超出了一般数据类型的表示范围,涉及到大整数的运算,用字符串来表示大数。这里的大数除法思想是:先用大数字符串的第一个数即是s[0]除以被除数,样例中是s[0]=1,用1/7,Q=0,R=1,再用R*10+s[1]除以7,得到商和余数,(这里为什么余数要乘以10?因为这个余数是上一个字符除以7余下的,相比较算术运算中的十位和个位,先用十位上的数除以7,余数不等于0,则在计算个位除以7时,需要加上十位余下的数,计算才正确。)以此类推,直到计算完字符串的最后一个字符。

C++代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <string>
using namespace std;
int main()
{
string A;
int B,Q=0,R=0;
cin>>A>>B;
Q=(A[0]-'0')/B;
if(A.length()==1||(A.length()>0&&Q!=0))
{
cout<<Q;
}
R=(A[0]-'0')%B;
for(int i=1;i<A.length();i++)
{
Q=((R*10)+A[i]-'0')/B;
cout<<Q;
R=((R*10)+A[i]-'0')%B;
}
cout<<" "<<R;
return 0;
}

大数四则运算:https://www.cnblogs.com/wuqianling/p/5387099.html
各种数据类型的取值范围:https://www.cnblogs.com/fightformylife/p/4022058.htmlhttps://www.cnblogs.com/fightformylife/p/4022058.html

文章目录
  1. 1. 1017 A除以B
    1. 1.1. 题目描述
    2. 1.2. 输入格式:
    3. 1.3. 输出格式:
    4. 1.4. 题目分析
    5. 1.5. C++代码