N進法

  • n進法の a を10進法の b に直すよう計算する
  • 2進法
n<-c(2,2,2,2,2)
a<-c(0,0,1,0,1)
v<-c(1,cumprod(n[-L]))
b<-sum(a*rev(v))
n;a;b
  • 一般の場合
Nmax<-10
L<-5
n<-sample(1:Nmax,L)
a<-c()
for(l in 1:L){
	a[l]<-sample(0:(n[l]-1),1)
	}

v<-rev(c(1,cumprod(rev(n)[-L])))
b<-sum(a*v)
n;a;b
  • 検算のため網羅的に変換してみる
Nmax<-10
L<-5
n<-sample(1:Nmax,L)
a<-c()
for(l in 1:L){
	a[l]<-sample(0:(n[l]-1),1)
	}

v<-rev(c(1,cumprod(rev(n)[-L])))
b<-sum(a*v)
n;a;b

##ここから検算用
A<-list()
for(l in 1:L){
	A[[l]]<-0:(n[l]-1)
	}
table<-data.matrix(expand.grid(A))
sort(table%*%v)
##ここまで