1017 进制转换
这道题涉及到负进制之间的知识点
这道题意思就是输入一个数,将这个数转成base进制的
首先我们得先明白一个式子:
除数*商+余数=被除数
这就是本题的关键,其实这道题特别水,我们一开始输入的数是一个十进制的数,去转别的数,直接进行短除法
也就是首先在短除函数里面将两个数去余,我们得把这个余数进行一个判断,分三种情况:
1.这个余数是负数,说明我们转的是一个负进制的数,需要把余数加上这个进制数也就是变成正数了;那么我们的操作数怎么办,其实这里我思考了很长时间,我觉得n+=base这一步其实就是一个进一位,因为负数嘛;比如我们举一个例子,-11/-2=5,但是5*-2=-10>-11所以我们就让之前的5变成6就满足满足这个式子了
2.则个余数是大于10的数,说明这个进制是类似与16进制的,所以我们得进行+55变成ABC字母的形式
3.否则的情况,这种情况就是数字,直接把他加48,因为这里有可能是字母所以我们先转char类型
然后进行递归,递归到最后再把余数输出,因为最后是倒序输出的,类似与栈,记得转char类型
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
#include<cstring>
#include<cmath>
using namespace std;
void change(int n,int base)
{//短除法
if(n==0)
return ;
int m=n%base;
if(m<0) m-=base,n+=base;//负数考虑
if(m>=10) m+=55;//16进制考虑
else m+='0';//普通0-9数字
change(n/base,base);
cout<<char(m);//余数倒序输出
return ;
}
int n,base;
int main()
{
cin>>n>>base;
cout<<n<<"=";
change(n,base);
cout<<"(base"<<base<<")"<<endl;
return 0;
}