1. 程式人生 > >循環右移

循環右移

color bsp 空格 編程 main 描述 循環右移 輸入 !=

【問題描述】

假設有一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; }

循環右移