传送门:p1017
题目分析
题目难度:普及-/提高
负进制和正进制本质上是相同的,都有“模一个数取余,然后倒序输出”的特点。
但区别在于,整数n%(-2)时可能会出现余数mod为负的情况,那么就需要进行转换
设 n÷R = a……mod
此时的mod<0,则需要mod+|R|变为正数,即mod-R,则式子变为
n = a*R+mod-R+R = (a+1)*R+mod-R 所以接下来的n就变为了a+1
即n在n/=R的基础上,if(mod<0) n++,mod-=R;
AC代码
#include<bits/stdc++.h>
using namespace std;
//负进制
char str[1000]; //用于储存数据,然后倒序输出,也可以采用递归形式省去数组空间消耗
int main()
{
int n,R;
int i = 0;
cin>>n>>R; cout<<n<<"=";
while(n!=0)
{
int mod = n%R; //R为负数!
n/=R;
if(mod<0) //如果mod为负,则要将其转化为正。
{
mod-=R;
n++;
}
if(mod<=9) str[i++] = mod+'0';
else str[i++] = mod+'A'-10;
}
str[i]='\0';
int len = strlen(str);
for(int i = len-1;i>=0;i--)
cout<<str[i];
cout<<"(base"<<R<<")";
}