P1017 [NOIP2000 提高组] 进制转换
负进制也一样用短除法转换,但是余数得保证是正数,不然没法用这个方法。
在求余的过程中加入处理:
- 如果负数,余数减去一个模数,上一次的商先加上一个模数再去除模数得到本次商。
比如对于 \(10\) 到 \(-2\) 进制的转换。
- 第一次短除 \(-2\),余 \(0\),商 \(-5\)。
- 第二次短除 \(-2\),余 \(-1\)。
- 进行操作,余 \(-1-(-2)=1\),商 $ (-5 + (-2))/(-2) = 3$
- 第三次短除 \(-2\),余 \(-1\)。
- 进行操作,余 \(-1-(-2)=1\),商 $ (-3 + (-2)) /(-2) = 1$
- 第三次短除 \(-2\),余 \(1\),商 \(0\)。
- 得出结果 \(11110\)
while(n)
{
int temp = n % m;
if (temp < 0) temp -= m, n += m;
ans[cnt++] = int_to_char(temp);
n /= m;
}
标签:短除,NOIP2000,进制,temp,P1017,模数
From: https://www.cnblogs.com/kdlyh/p/17871463.html