循环右移.

举报
开心星人 发表于 2022/10/14 11:20:11 2022/10/14
【摘要】 问题描述:假设有一16位的无符号整数,可以对其二进制进行循环右移操作,右移后任然是无符号整数,编写程序从控制台读入要右移的整数和循环右移的位数,求得并输出循环右移后的十进制数据。输入形式:从控制台输入要右移的十进制整数(大于等于0,小于等于65535)和循环右移的位数(大于等于0,小于等于16),两整数之间用一个空格分隔。输出形式:向控制台输出循环右移后的十进制整数样例输入:6 3样例输入:...

问题描述:假设有一16位的无符号整数,可以对其二进制进行循环右移操作,右移后任然是无符号整数,编写程序从控制台读入要右移的整数和循环右移的位数,求得并输出循环右移后的十进制数据。
输入形式:从控制台输入要右移的十进制整数(大于等于0,小于等于65535)和循环右移的位数(大于等于0,小于等于16),两整数之间用一个空格分隔。
输出形式:向控制台输出循环右移后的十进制整数
样例输入:6 3
样例输入:49152
样例说明:输入的待右移的整数为6,该无符号整数的二进制形式为:0000000000000110,向右循环右移3位后的二进制形式为:1100000000000000,对应的十进制数据为:49152

//大佬的代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n,k;cin>>n>>k;
    int temp= n % (int)pow(2,k);
    cout<< (temp<<(16-k)+ (n>>k))<<endl;  //左移和右移运算符
    
    return 0;
}
//我的代码
#include<bits/stdc++.h>
using namespace std;
const int MAX = 16;

int binary_to_decimal(string a)    //将二进制字符串转换成十进制的整数
{
	int len = a.length();
	int sum = 0;
	for (int i = 0; i < len; i++)
	{
		sum += atoi(a.substr(len - i - 1,1).c_str())*pow(2, i);    //int atoi(const char* nptr) ,参数必须是c字符串!
	}                                                              //使用substr成员函数提取出来的是C++字符串,需要将其转换成c字符串                                
	return sum;
}

int main()
{
	int num, pos_float;
	cin >> num >> pos_float;
	char old_str[MAX];
	itoa(num, old_str, 2);      //进制转换,num为目标数,old_str是保存进制转换后的字符串(必须是c字符串),2是目标进制

	string new_str;
	new_str = old_str;          //将C字符串转换成C++字符串

	string str1 = "";
	for (int i = 0; i < 16 - new_str.length(); i++)  //补0,使二进制数为16位
	{
		str1 += "0";
	}
	new_str = str1 + new_str;

	string part1_str = new_str.substr(MAX - pos_float);  //进行移动
	string part2_str = new_str.substr(0, MAX - pos_float);

	new_str = part1_str + part2_str;

	cout << binary_to_decimal(new_str) << endl;
	
	return 0;
}

仍需努力!!!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。