Carry


私信TA

用户名:Karry

访问量:4345

签 名:

Karry

等  级
排  名 2432
经  验 2228
参赛次数 0
文章发表 6
年  龄 22
在职情况 学生
学  校 嘉兴学院
专  业 软件工程

  自我简介:

热爱计算机,热爱编程

TA的其他文章

解题思路:
    将10进制转化为2进制保存到一个数组中。。。。。话不多说,看代码,代码中有比较详细的解释

注意事项:
        n>0和n<0两种情况只要换个角度思考就能通过同一个代码块处理,能节省不少代码(第一次走了远路)。

参考代码:
#include<stdio.h>
unsigned move(unsigned, int);     //声明move函数

int main(){
    unsigned value;
    int n;
    scanf("%u %d", &value, &n);
    printf("%u\n", move(value, n));
    return 0;
}

unsigned move(unsigned value, int n){
    unsigned sum = 0, k = 1;      //sum作为新10进制数。
    unsigned bits[32];        //最长32位,定义一个32个元素的数组用于保存二进制
    int i;                    //i用作循环变量
    for(i=0; i<32; i++){      //该循环语句用于将10进制转化为二进制并保存到bits数组中
        bits[i]= value % 2;
        value /= 2;
    }
    if(n < 0){                //当n小于零时,可以把,这样就统一了n>0及n<0时的处理方法
        n = 32 + n;       //相当于32-abs(n);把主体作为需要移动的部分
    }
    unsigned temp[n];         //中转数组,用于保存需要移动的元素
    for(i=0; i<n; i++){       //把原数组中前面的n个元素保存到中转数组中
        temp[i] = bits[i];
    }
    for(i=0; i<32-n; i++){    //把原数组中剩余部分依次往前移
        bits[i] = bits[i+n];
    }
    for(i=0; i<n; i++){
    bits[32-n+i] = temp[i];   //再把中转数组中的元素填到原数组的后面
    }
    
    //下面是未合并n>0和n<0的处理方法,分两种情况分别处理(处理步骤和上面一样)
    /*
    if(n < 0){                   //截取后面部分移到前面 
        for(i=0; i<abs(n); i++){
            temp[i] = bits[32-abs(n)+i];
        }
        for(i=32-abs(n)-1; i>=0; i--){
            bits[i-n] = bits[i];
        }
        for(i=0; i<abs(n); i++){
            bits[i] = temp[i];
        }
    }else{                   //截取前面部分移到后面 
        for(i=0; i<n; i++){
            temp[i] = bits[i];
        }
        for(i=0; i<32-n; i++){
            bits[i] = bits[i+n];
        }
        for(i=0; i<n; i++){
            bits[32-n+i] = temp[i]; 
        }
    }*/
    
    for(i=0; i<32; i++){        //将处理后的二进制转换为10进制
        sum += bits[i]*k;
        k *= 2;
    }
return sum;
}


 

0.0分

0 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区