负数的进制转化存在一个余数是否为正数。
-5 / -2 = 3 余 1
3 / -2 = -1 余 1
-1 / -2 = 1 余 1
1 / -2 = 0 余 1
那么 -5 的二进制位 1111
5 / -2 = -2 余 1
-2 / -2 = 1 余 0
1 / -2 = 0 余 1
那么 5 的二进制位 101
#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;
}
原文:https://www.cnblogs.com/VagrantAC/p/12555122.html