标签:整数 循环 color ++ clu stream pre vector time
【问题描述】
假设有一16位的无符号整数,可以对其二进制数据进行循环右移操作,右移后仍然是无符号整数。编写程序从控制台读入要右移的整数和循环右移的位数,求得并输出循环右移后的十进制数据。
【输入形式】
从控制台输入要右移的十进制整数(大于等于0,小于等于65535)和循环右移的位数(大于等于0,小于等于16),两整数之间用一个空格分隔。
【输出形式】
向控制台输出循环右移后的十进制整数。
【输入样例1】
65532 2
【输出样例1】
16383
【样例1说明】
输入的待右移的整数为65532,该无符号整数的二进制形式为:1111111111111100,向右循环右移两位后的二进制形式为:0011111111111111,对应的十进制数据为:16383。
【输入样例2】
6 3
【输出样例2】
49152
【样例2说明】
输入的待右移的整数为6,该无符号整数的二进制形式为:0000000000000110,向右循环右移3位后的二进制形式为:1100000000000000,对应的十进制数据为:49152。
【评分标准】
该题要求编程求得循环右移后的数据,提交程序文件名为shift.c。
#include <cstdio> #include <iostream> #include <algorithm> #include <cstring> #include <vector> #include <stdlib.h> #include <cstdlib> #include <string.h> #include <string> #include <cmath> #include <map> #include <time.h> using namespace std; int s[16]; int main() { int n; int m; cin >> n >> m; m %= 16; int index = 0; while (n != 0) { s[index++] = n % 2; //cout << s[index - 1]; n /= 2; } int sum = 0; int t = 1; for (int i = m; i < 16; i++) { //cout << t << " " << s[i] << endl; sum = sum + t * s[i]; t = t * 2; } for (int i = 0; i < m; i++) { //cout << t; sum = sum + t * s[i]; t = t * 2; } cout << sum; return 0; }
标签:整数 循环 color ++ clu stream pre vector time
原文地址:https://www.cnblogs.com/woxiaosade/p/10472726.html