题目
解题思路
在正进制的时候,我们不难发现进制转换可以直接进行
int i = 0;
while(num)
{
int arr[i++] = num % base;
num /= base;
}
但是在负进制的时候,我们会发现负数mod负数得到的结果仍然是负数
-10 % -3 = -1
然而进制的表示需要正数,所以我们需要对负数进行特殊处理:
n
u
m
b
a
s
e
=
N
…
…
t
e
m
p
\frac {num} {base} = N …… temp
basenum=N……temp
变成乘法就是
b
a
s
e
×
N
+
t
e
m
p
=
n
u
m
base\times N + temp=num
base×N+temp=num
让N变成正数
b
a
s
e
×
(
N
+
1
)
+
(
t
e
m
p
−
b
a
s
e
)
=
n
u
m
base \times (N + 1) +(temp - base) = num
base×(N+1)+(temp−base)=num
此处base是负数,此处我们再把 temp - base 储存起来
所以我们要做以下处理
int i = 0;
while(num)
{
int temp = num % base;
num /= base;
if(temp < 0)
{
temp -= base;
num++;
}
arr[i++] = temp;
}
代码
#include<iostream>
#include<stack>
using namespace std;
string alpha = "0123456789ABCDEFGHIJKLMN";
int main()
{
int num;
int base;
stack<int> store;
cin >> num;
cin >> base;
if(!num)
{
cout<<0;
return 0;
}
while(num)
{
int temp = num % base;
num /= base;
if(temp < 0)
{
temp -= base;
num++;
}
store.push(temp);
}
while(!store.empty())
{
int temp = store.top();
store.pop();
cout << alpha[temp];
}
cout<<endl;
}