负进制的进制转化

负数的进制转化存在一个余数是否为正数。

例如:

-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;
}

猜你喜欢

转载自www.cnblogs.com/VagrantAC/p/12555122.html