本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。
输入在一行中依次给出 A 和 B,中间以 1 空格分隔。
在一行中依次输出 Q 和 R,中间以 1 空格分隔。
123456789050987654321 7
17636684150141093474 3
代码:
#include
#include
#include
using namespace std;
// 构造体
struct Num{
int d[1010];
int len;
Num(){
len = 0;
memset(d, 0, sizeof(d));
}
}temp, last;
// 转换
Num make(char a[ ]) {
Num c;
c.len = strlen(a);
for(int i = 0; i < c.len; i++) {
c.d[i] = a[c.len - i - 1] - '0';
}
return c;
}
// 除数
Num div(Num a, int b, int& r) {
Num c;
c.len = a.len;
for(int i = a.len - 1; i >= 0; i--) {
r = r * 10 + a.d[i];
c.d[i] = r / b;
r = r % b;
}
while(c.len - 1 >= 1 && c.d[c.len - 1] == 0) {
c.len--;
}
return c;
}
// 大整数的输出
void print(Num a) {
for(int i = a.len-1; i >= 0; i--) {
printf("%d", a.d[i]);
}
}
int main() {
// 此题目是大整数余数
// 1. 构造体 2. 将输入的数字转换成大整数
// 3. 开始取余
char a[1010];
int q, r = 0;
Num b, c;
scanf("%s %d", a, &q);
b = make(a);
c = div(b, q, r);
print(c);
printf(" %d", r);
return 0;
}