Johnny


私信TA

用户名:algorithms

访问量:17431

签 名:

幸福是奋斗出来的!

等  级
排  名 357
经  验 5133
参赛次数 1
文章发表 29
年  龄 0
在职情况 学生
学  校 武汉科技大学
专  业

  自我简介:

解题思路:1、借用指针使用递归算法实现右移;2、将左移转化为右移,统一函数

注意事项:1、本题中的整数是32位无符号整数,输入和输出时可以使用%u进行处理2、末尾输出换行
参考代码:

#include<stdio.h>

#include<math.h>

void move(int a[32],int n)      //先实现右移一位的功能,再使用递归算法右移n位

{

    int *p,a_end;

    a_end=a[31];

    for(p=&a[31];p>a;p--)

    {

        *p=*(p-1);

    }

    a[0]=a_end;

    n--;

    if(n>0) move(a,n);

}

int main()

{

    int i,n,a[100],n2,k;

    unsigned int value,sum=0;

    scanf("%u %d",&value,&n);

    for(i=31;i>=0;i--)       //拆分求二进制

    {

        a[i]=value%2;

        value/=2;

    }

    if(n<0)                     //左移n位,相当于右移m-n位(m为总位数)

    {

        n=n+32;

    }

    move(a,n);


    for(i=31,k=0;i>=0;i--,k++)  //将移位后的二进制数组重新组合

    {

        sum=sum+pow(2,k)*a[i];

    }

    printf("%u\n",sum);

    return 0;

}


 

0.0分

0 人评分

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

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区