以 10 为底数,以 3 为底数给出任何数字 n 的算法
Algorithm that gives you any number n in base 10 in base 3
我需要编写一个算法,在 R 中以 3 为基数给出任意数字 n。到目前为止,我是这样写的:
vector <- c(10, 100, 1000, 10000)
ternary <- function(n) { while (n != 0) {
{q<- n%/%3}
{r <- n%%3}
{return(r)}
q<- n }
sapply(vector, ternary)}
我认为通过应用 sapply(vector, ternary) 它会为我提供任何给定 n 的所有 r,我将放入 ternary(n)。我的代码仍然给我 "last r" 但我不明白为什么。
这是我在n年级(不记得具体时间)手工学习的直接实现。
base3 <- function(x){
y <- integer(0)
while(x >= 3){
r <- x %% 3
x <- x %/% 3
y <- c(r, y)
}
y <- c(x, y)
y
}
base3(10)
#[1] 1 0 1
base3(5)
#[1] 1 2
您可以使用 recursion
:
base3 =function(x,y=NULL){
d = x %/% 3
r=c(x %% 3,y)
if(d>=3) base3(d,r)
else c(d,r)
}
base3(10)
[1] 1 0 1
> base3(100)
[1] 1 0 2 0 1
我需要编写一个算法,在 R 中以 3 为基数给出任意数字 n。到目前为止,我是这样写的:
vector <- c(10, 100, 1000, 10000)
ternary <- function(n) { while (n != 0) {
{q<- n%/%3}
{r <- n%%3}
{return(r)}
q<- n }
sapply(vector, ternary)}
我认为通过应用 sapply(vector, ternary) 它会为我提供任何给定 n 的所有 r,我将放入 ternary(n)。我的代码仍然给我 "last r" 但我不明白为什么。
这是我在n年级(不记得具体时间)手工学习的直接实现。
base3 <- function(x){
y <- integer(0)
while(x >= 3){
r <- x %% 3
x <- x %/% 3
y <- c(r, y)
}
y <- c(x, y)
y
}
base3(10)
#[1] 1 0 1
base3(5)
#[1] 1 2
您可以使用 recursion
:
base3 =function(x,y=NULL){
d = x %/% 3
r=c(x %% 3,y)
if(d>=3) base3(d,r)
else c(d,r)
}
base3(10)
[1] 1 0 1
> base3(100)
[1] 1 0 2 0 1