循環右移
阿新 • • 發佈:2019-03-04
color bsp 空格 編程 main 描述 循環右移 輸入 !=
【輸入樣例2】
6 3
【問題描述】
假設有一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; }
循環右移