题目:将一个32为10进制数转为负3进制。
input 11
output 102
解释:11= 1*(-3)^2+0*(-3) + 2*(-3)^0
原题应该是leetcode里面一个负2进制转换。
我觉得这题主要是考察一个结论:当余数为负数时,将商+1,再取模。同时原数变为n/(-3)+1;
后面更一般的,给n要求转m进制数。也是这么做。
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+7;
typedef long long ll;
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
int n,m;
cin>>n>>m;
int bit[1000];
int k=0;
while (n)
{
if(n%(m)>=0)
{
bit[k]=n%(m);
n=n/(m);
}
else
{
bit[k]=n-(n/(m)+1)*(m); //保证余数不为负数
n=n/m+1;
}
k++;
}
for(int j=k-1;j>=0;j--)
{
cout<<bit[j];
}
cout<<endl;
return 0;
}