zoukankan      html  css  js  c++  java
  • 模拟二进制进位

    #include<stdio.h>
    #include<string.h>
    
    int array[11];
    void jinWei(int n){
        array[10]++;
        int X;
        int i = 10;
        if(array[i] == 2){
            array[i] = 0;
            X = 1;
            i--;
            while(X != 0){
                array[i] += X;
                X = 0;
                if(array[i] == 2){
                    X = 1;
                    array[i] = 0;
                    i--;
                }
            }
        }
    
        for(int i = 0;i <= 10;i++){
            printf("%d",array[i]);
        }
        printf("
    ");
    
    }
    int main(){
        int n;
        memset(array,0,sizeof(array));
        scanf("%d",&n);
        for(int i = 0; i< n;i++){
            jinWei(n);
        }
        return 0;
    }

    上方的 31 即从“00000”进位到“11111”的次数

    "11111"有六位,转换为十进制即 31

    主要的进位函数,思路是:

    每次对数组最后一位+1,如果产生了进位,则依据产生的进位不断往前推进,直到进位为0

    但也有不足点,比如,在不断往前推进中,偷懒,使用较大的数组避免  "i--" 溢出。

            while(X != 0){
                array[i] += X;
                X = 0;
                if(array[i] == 2){
                    X = 1;
                    array[i] = 0;
                    i--;
                    if(i < 0)
                        break;
                }
            }    

    可以加个break,使得一旦溢出,就结束,从而,当发生溢出时,最后所得的数组必然是:”0000....0000“

  • 相关阅读:
    Linux命令——mkdir
    UNIX 高手的 10 个习惯
    Linux命令——pwd
    Linux命令——cd命令
    Linux命令——ls命令
    denyhost安装脚本
    三台服务器无需密码相互访问
    字符串方法
    nginx简易安装
    shell 条件判断语句整理
  • 原文地址:https://www.cnblogs.com/expedition/p/12002668.html
Copyright © 2011-2022 走看看