【00NOIP提高组】进制转换

  • 可可爱爱的传送门
  • 本来十进制转其他进制还是比较简单的
  • 就是负进制奇奇怪怪
  • 最重要的是在余数为负数的时候——
    原来的余数减去进制 (即加上进制的绝对值)
    商+1
  • 具体是这样的: if(a[i]<0)n++,a[i]-=r;
  • 另一点是注意当余数>10时的输出需要用 (char)(a[j]-10+'A')记得加“(char)”,否则会是一堆数字
  • 当然用数组也是可以的 ,但是我懒
  • 其余见代码

代码

#include<bits/stdc++.h>
using namespace std;
int n,r,a[101],i;
int main()
{
    while(cin>>n>>r){
    	i=0;
    	do{
    	    a[++i]=n%r;
    	    n/=r;
    	    if(a[i]<0){//进位
    	        n++,a[i]-=r;
    	    }
    	}while(n!=0);
    	for(int j=i;j>=1;j--){
    		if(a[j]<10)cout<<a[j];
    		else cout<<(char)(a[j]-10+'A');
		}
		cout<<endl;
	}
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值