负数的进制转化存在一个余数是否为正数。
例如:
-5 的 -2 进制计算。
-5 / -2 = 3 余 1
3 / -2 = -1 余 1
-1 / -2 = 1 余 1
1 / -2 = 0 余 1
那么 -5 的二进制位 1111
5 的 -2 进制计算。
5 / -2 = -2 余 1
-2 / -2 = 1 余 0
1 / -2 = 0 余 1
那么 5 的二进制位 101
洛谷 P1017
#include <cstdio>
#include <vector>
#include <iostream>
using namespace std;
char base[]={\'0\',\'1\',\'2\',\'3\',\'4\',\'5\',\'6\',\'7\',\'8\',\'9\',\'A\',\'B\',\'C\',\'D\',\'E\',\'F\',\'G\',\'H\',\'I\',\'J\'};
int main(){
int N,R;
cin>>N>>R;
vector<char>v;
cout<<N<<"=";
while(N){
v.push_back((N%R-R)%R);
N-=(N%R-R)%R;N/=R;
}
if(v.size()==0)v.push_back(0);
for(int i=v.size()-1;i>=0;i--)
cout<<base[v[i]];
cout<<"(base"<<R<<")"<<endl;
return 0;
}