题目
本题要求计算 A / B A/B A / B ,其中 A A A 是不超过 1000 位的正整数, B B B 是 1 位正整数。你需要输出商数 Q Q Q 和余数 R R R ,使得 A = B × Q + R A = B \times Q + R A = B × Q + R 成立。
输入格式:
输入在一行中依次给出 A A A 和 B B B ,中间以 1 空格分隔。
输出格式:
在一行中依次输出 Q Q Q 和 R R R ,中间以 1 空格分隔。
输入样例:
123456789050987654321 7
输出样例:
17636684150141093474 3
代码
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
string input;
int B,i;
cin >> input >> B;
for (i = 0; input[i] != '\0'; i++)
{
if (input[i] != '0')
break;
}
input = input.substr(i);
int len = input.length();
int n = len / 5;
int* a = new int[n + 1];
int* c = new int[n + 1];
int j = n, low, jin = 0, t;
int result_r;
a[n] = 0;
c[n] = 0;
for (i = len; i > 0; i -= 5)
{
if (i - 5 <= 0)
a[j--] = atoi((input.substr(0, i)).c_str());
else
a[j--] = atoi((input.substr(i - 5, 5)).c_str());
}
low = j;
int b[10] = { 0,1,2,3,4,5,6,7,8,9 };
for (i = n; i > low; i--)
c[i] = a[i];
for (i = 0; i < 10; i++)
{
c[n] -= b[i];
for (j = low + 1; j < n + 1; j++)
{
jin = c[j] % B;
if (jin == 0 && j == n)
{
result_r = b[i];
i = 10;
j = n;
}
else
{
if (j != n)
c[j + 1] += int(jin * pow(10, 5));
}
}
for (t = n; t > low; t--)
c[t] = a[t];
}
a[n] -= result_r;
for (i = low + 1; i < n + 1; i++)
{
jin = a[i] % B;
c[i] = a[i] / B;
if (i != n)
a[i + 1] += int(jin * pow(10, 5));
}
j = 0;
t = 0;
for (i = low + 1; i < n + 1; i++)
{
if (c[i] != 0 && t == 0)
{
j = n+1;
t = 1;
cout << c[i];
continue;
}
if (i < j)
{
if (c[i] < 10)
cout << "0000"<<c[i];
else if(c[i] < 100)
cout << "000" << c[i];
else if (c[i] < 1000)
cout << "00" << c[i];
else if (c[i] < 10000)
cout << "0" << c[i];
else if (c[i] < 100000)
cout <<c[i];
}
}
if(low+1==n&&c[n]==0)
cout <<0<< " " << result_r;
else
cout << " "<<result_r;
return 0;
}