本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。
输入格式:
输入在一行中依次给出 A 和 B,中间以 1 空格分隔。
输出格式:
在一行中依次输出 Q 和 R,中间以 1 空格分隔。
输入样例:
123456789050987654321 7
输出样例:
17636684150141093474 3
高精度整数与int相除:
bign divide(bign a, int b, int &r) {//题目一般要你输出余数,这里用引用返回
bign c;
c.len = a.len;
for(int i = a.len - 1; i >= 0; i--) {
r = r * 10 + a.d[i];//高位和余数乘以10相加
if(r < b) {//不够除
c.d[i] = 0;//高位赋值0
} else {//够除
c.d[i] = r / b;
r = r % b;
}
}
while(c.len >= 2 && c.d[c.len - 1] == 0){//去除高位0, 同时至少保留一位最低位
c.len--;
}
return c;
}
高精度整数高精度整数相加:
bign add(bign a, bign b){
bign c;
int carry = 0;//进位
for(int i = 0; i < a.len || i < b.len; i++){
int temp = a.d[i] + b.d[i] + carry;
c.d[c.len++] = temp % 10;//个位赋给c
carry = temp / 10;
}
if(carry != 0){//进位不为零赋给高位
c.d[c.len++] = carry;
}
return c;
}
高精度整数高精度整数相减:
bign sub(bign a, bign b){
bign c;
for(int i = 0; i < a.len || i < b.len; i++){
if(a.d[i] < b.d[i]){//低位不够减
a.d[i+1]--;//高位-1
a.d[i] += 10;//低位向高位借了1
}
c.d[c.len++] = a.d[i] - b.d[i];
}
while(c.len >= 2 && c.d[len - 1] == 0){//去除高位0, 同时至少保留一位最低位
c.len--;
}
}
代码一:
#include<iostream>
#include<string>
using namespace std;
int main() {
string s;
int d, div, mod;
cin >> s >> d;
div = (s[0] - '0') / d;
mod = (s[0] - '0') % d;
if(div != 0 || s.size() == 1) cout << div;
for(int i = 1; i < s.size(); i++)
{
div = (mod * 10 + (s[i] - '0')) / d;
cout << div;
mod = (mod * 10 + (s[i] - '0')) % d;
}
cout <<" "<< mod <<endl;
return 0;
}
代码二:
#include <iostream>
#include <string.h>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
struct bign {
int d[1005];
int len;
bign() {
memset(d, 0, sizeof(d));
len = 0;
}
};
bign change(string s) {
bign a;
int len = s.length();
for(int i = len - 1; i >= 0; i--) {
a.d[a.len++] = s[i] - '0';
}
return a;
}
void output(bign a) {
for(int i = a.len - 1; i >= 0; i--) {
printf("%d", a.d[i]);
}
}
bign divide(bign a, int b, int &r) {
bign c;
c.len = a.len;
for(int i = a.len - 1; i >= 0; i--) {
r = r * 10 + a.d[i];
if(r < b) {
c.d[i] = 0;
} else {
c.d[i] = r / b;
r = r % b;
}
}
while(c.len >= 2 && c.d[c.len - 1] == 0){
c.len--;
}
return c;
}
int main(int argc, char** argv) {
string s;
int num;
cin >> s >> num;
bign a = change(s);
int r = 0;
bign b = divide(a, num, r);
output(b);
printf(" %d\n", r);
return 0;
}