P1017 [NOIP2000 提高组] 进制转换

发布时间 2023-12-02 12:55:34作者: 加固文明幻景

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;
}