循环右移.
【摘要】 问题描述:假设有一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)