1017 进制转换

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值