众所周知,我们令n为被除数,m为除数和进制数,a为商,j为余数,可以得到:
n/m=a
n-a*m=j
根据我们刚刚推得的算法:j-=m;
那么此时方程2两端同时减去m得
n-a*m-m=j-m
提公因式,得
n-(a+1)*m=j-m
但我们还要让j-m符合余数计算模式,即符合n-a*m=j的形式。
显然,此时a=a+1正好符合n-a*m=j的形式。所以:
n++(此时n已经/=m)
#define _CRT_SECURE_NO_WARNINGS 1
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define endl '\n'
#define cinios (ios::sync_with_stdio(false), cin.tie(0), cout.tie(0))
#define setf cout.setf(ios::fixed)
const double gama = 0.5772156649;
const int fac[] = { 0,1,2,6,24,120,720,5040,40320,362880 };
int n, m;
char a[1000001];
int l = 0;
int main()
{
int i;
cin >> n >> m;
cout << n << "=";
while (n != 0)
{
int j = n % m;
n /= m;
if (j < 0)
{
j -= m;
n++;
}
if (j < 10)
{
a[++l] = (char)(j + '0');
}
else
a[++l] = (char)(j - 10 + 'A');
}
for (i = l; i >= 1; i--)
cout << a[i];
cout << "(base" << m << ")" << endl;
}