17倍
阿新 • • 發佈:2018-12-23
題目描述
學習程式設計的Lanlan記得老師給她佈置的第一個任務是:輸入一個數N,然後輸出17*N的值。當然這個任務非常簡單,經過一段時間的學習,蘭蘭有了一些的進步,老師又佈置了一個類似的任務,只是變更了一個條件,輸入的N是一個二進位制數,輸出的值也要是二進位制表示的。
現在請幫助Lanlan完成這個任務。
輸入
一個二進位制表示的數N。
輸出
二進位制表示的17*N。
樣例輸入
樣例資料
10110111
樣例輸出
110000100111
提示
10110111相當於十進位制的183,於是183*17=3111,二進位制形式是110000100111。
30%的資料N的位數小於25位
50%的資料N的位數小於50位
100%的資料N的位數小於1000位
分析:看到這個1000位,就知道要直接用數解決這個題是不可能了,所以運用陣列存這些數,然後再通過二進位制數的乘法,即每位數都乘一次17,最後每一位對二取餘並存入另一個數組,最後輸出即可.
#include<iostream> #include<cstring> using namespace std; int main() { char n[1005]; scanf("%s", n); //字元陣列便於存入 { int num[100005] = { 0 }, ans[100005]; int len = strlen(n), count = 0; for (int i = len - 1; i >= 0; i--) num[count++] = n[i] - '0'; for (int i = 0; i < count; i++) num[i] *= 17; int sum = num[0]; //將字元陣列轉換為整形陣列便於計算 count = 0; while (sum != 0 || count <= len) { ans[count] = sum % 2; sum /= 2; count++; sum += num[count]; } for (int i = count - 1; i >= 0; i--) //存入時是倒序,所以輸出要倒著來 { printf("%d", ans[i]); } printf("\n"); } return 0; }