本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。
输入格式:
输入在一行中依次给出 A 和 B,中间以 1 空格分隔。
输出格式:
在一行中依次输出 Q 和 R,中间以 1 空格分隔。
输入样例:
123456789050987654321 7
输出样例:
17636684150141093474 3
思路
- 用数组模拟大数,仿照除法的过程即可
代码
#include<bits/stdc++.h>
using namespace std;
struct bignumber
{
int num[1010];
int len;
bignumber()
{
memset(num, 0, sizeof(num));
len = 0;
}
}a;
void assignment(string s)
{
for(int i=0;i<s.size();i++)
a.num[i] = s[s.size() - i - 1] - '0'; //低位存储对应数字的低位
a.len = s.size();
}
bignumber divide(bignumber a, int b, int &r)
{
bignumber c;
c.len = a.len;
for(int i=a.len-1;i>=0;i--) //从高位除起
{
r = r * 10 + a.num[i];
if(r < b) c.num[i] = 0; //不够除
else
{
c.num[i] = r / b; //够除
r %= b;
}
}
while(c.num[c.len - 1] == 0 && c.len > 1) //这里>1是因为可能a<b,那么就是0
c.len--;
return c;
}
int main()
{
string s;
int b;
cin >> s >> b;
assignment(s);
int r = 0;
bignumber q = divide(a, b, r);
for(int i=q.len-1;i>=0;i--)
cout << q.num[i];
cout << " " << r;
return 0;
}
引用
https://pintia.cn/problem-sets/994805260223102976/problems/994805305181847552