计算n位m进制所有整数的算法

2014-11-23 23:24:14 · 作者: · 浏览: 5

算法来源:《the art of computer programming vol 4》

算法的思路:

1、 将n为整数记作,a1a2…an ,初始化为0…00。

2、 令j = n, 计算aj = aj + 1; 当aj 等于m-1时,向高位进1,此位设为0,对所有为都重复此步骤。直到所有为都遍历完,为之。

此算法的c语言实现:

void mixed_radix_num(int n, int radix)

{

int j;

int *a=(int *) malloc (sizeof (int) * (n + 1));

if(!a) return;

for(j=0;j<=n;++j)

*(a+j)=0;

while(1){

print_num(a,n);

j=n;

while(*(a+j)==(radix-1))

{

*(a+j)=0;

j--;

}

if(j == 0) break;

*(a+j)=*(a+j)+1;

}

free(a);

a=0;

}

此代码的关键:对于n位整数,申请n+1个整数的空间,a[0]作为哨兵位。