1. 程式人生 > >17倍

17倍

題目描述

學習程式設計的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;
}