P1017 进制转换

· · 个人记录

10进制->-r进制

需要注意的是负数取余可能结果小于0,需要借位(从上一位借)

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
string a="0123456789ABCDEFGHIJKLMN";//0~20
int b[50];
int main()
{
    int n,r;
    scanf("%d%d",&n,&r);
    int i=0;
    printf("%d=",n);
    while(n)
    {
        int u=n%r;
        n/=r;
        if(u<0) //借位
        {
            u-=r;
            n++; //本位-(-r)相当于向上一位借了一个-1所以要加上去
        }
        b[++i]=u;
    }
    for(int j=i;j>=1;j--)
        printf("%c",a[b[j]]);
    printf("(base%d)",r);
    return 0;
}