转成p进制算法C语言

今天打比赛的时候竟然下一没有想起来,

实际上是非常简单的。

举例说明:

$64 = 2 \times 3^3 + 1 \times 3^2 + 3^0$

根据秦九韶算法每次提出3,即 $3(2 \times 3^2 + 1 \times 3^1) + 1 = 64$,

可见得到最低位系数只需要对3取余,

将n除以3,重复上述步骤。

#include<stdio.h>

void shift(int n, int p)   //将n转化成p进制
{
    while(n)
    {
        printf("%d ", n%p);   //从低到高输出
        n = n / p;
    }
}

void shift2(int n, int p)  //强行写成递归,hh
{
    if(n == 0)  return;
    printf("%d ", n%p);
    shift2(n/p, p);
}

int main()
{
    shift(64, 3);  //1 0 1 2
}

 

posted @ 2019-09-16 09:27  Rogn  阅读(426)  评论(0编辑  收藏  举报