1. 程式人生 > >PAT乙級(Basic Level)練習題 一的個數

PAT乙級(Basic Level)練習題 一的個數

題目描述 NowCoder總是力爭上游,凡事都要拿第一,所以他對“1”這個數情有獨鍾。愛屋及烏,他也很喜歡包含1的數,例如10、11、12……。不僅如此,他同樣喜歡任意進制中包含1的數。當然,其中包含1的個數越多他越喜歡。你能幫他統計一下某個數在特定的進位制下1的個數嗎?

輸入描述: 輸入有多組資料,每組資料包含一個正整數n (1≤n≤2147483647)和一個正整數r (2≤r≤16)。 其中n為十進位制整數,r為目標進位制。

輸出描述: 對應每組輸入,輸出整數n轉換成r進位制之後,其中包含多少個“1”。

輸入例子: 1 2 123 16

輸出例子: 1 0

題目分析: 我們用一個字元陣列來儲存輸入的二進位制數,‘1’和1相差了48,所以我們要在字元後減去48就得到了正確的數:

#include<stdio.h>
#include<math.h>
#pragma warning( disable : 4996)

char skew[1000] = { 0 };
int i = 0,b;
int num = 0;//num為10進位制後
int main()
{
	
	while (scanf("%s", &skew) != EOF)
	{
		i = 0;
		num = 0;//每迴圈一次重置
		while (skew[i] != '\0')//i用來計算陣列長度
		{
			i++;
		}
		b = i;
		for (int k = 0; k < i; k++)
		{
			num += (skew[k] - 48) * (pow(2, b) - 1);
			b--;
		}
		printf("%d\n", num);

	}
	
	return 0;
}