菜单

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

2018年11月16日 - Php

零星个n位二向前制数分别存储在片单n元数组A和B中,这点儿只整数的及有一个n+1首批的数组C中
答:
斯题材要是观测相加进位的题目,元素1+1 =0 并且朝前进一位
ADD-BINARY(A,B)
  C=new integer[A.length+1]
  carry=0
  for i=A.length downto 1
    C[i+1]=(A[i]+B[i]+carry)%2
    carry=(A[i]+B[i]+carry)/2
  C[i]=carry

 

<?php
function addBinary($A,$B){
        $C=array();
        $length=count($A);
        $carry=0;
        for($i=$length-1;$i>=0;$i--){
                //当前位的数字逻辑 1+1=0 1+0=1
                $C[$i+1]=($A[$i]+$B[$i]+$carry)%2;
                //进位的数字逻辑  1+1=1 1+0=0
                $carry=intval(($A[$i]+$B[$i]+$carry)/2);
        }   
        $C[$i+1]=$carry;
        return $C; 
}

$A=array(0,1,1,0);
$B=array(1,1,1,1);
$C=addBinary($A,$B);
var_dump($C);

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

 

算法的思绪manbetx网页手机登录版:

 

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]当哨兵位。

http://www.bkjia.com/Cyy/492316.htmlwww.bkjia.comtruehttp://www.bkjia.com/Cyy/492316.htmlTechArticle算法来源:《the art of computer programming vol
4》 算法的思绪: 1、 将n为整数记作,a1a2an ,初始化为000。 2、 令j = n,
计算aj = aj + 1; 当aj 等于…

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图