Task Description
How Many Ones Needed?
要表示一個二進位的數字只需要用到兩個數字0跟1,若要表示某個特定的數值,會需要用到固定數量的0和1。
舉例來說,要將介於十進位5和10之間的數字(包含)表示成二進位:0101(兩個1)、0110(兩個1)、0111(三個1)、1000(一個1)、1001(兩個1)、1010(兩個1),總共會需要用到十二個1。
你需要寫一個程式來計算如果將介於範圍 a 和 b 之間(包含)的所有十進位整數表示為二進位會需要用到多少個1。
請使用此函數原型進行實作:int count_ones(int dec_num);
此函數會計算將傳入的十進位數字(dec_num)轉為二進位時會需要用到幾個1並回傳。
Hint
count_ones.h
打上 function header 以及相關的設定。
int count_ones( int dec_num);
|
count_ones.c
撰寫程式碼後對應上傳。
#include "count_ones.h"
int count_ones( int dec_num) {
/ add your code /
}
|
main.c
這個檔案無法更改也無須上傳。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <stdio.h>
#include "count_ones.h"
int main() {
int a, b;
while ( scanf ( "%d%d" , &a, &b)) {
int total_ones_num = 0;
if (a == 0 && b == 0) break ;
for ( int i = a;i <= b;i++) {
total_ones_num += count_ones(i);
}
printf ( "%d\n" , total_ones_num);
}
return 0;
}
|
Input Format
每一列測試資料包含兩個正整數 a 和 b (0≤a≤b≤10000000),最後一列有兩個0代表輸入結束。
Output Format
對每筆測試資料皆須輸出一個整數,代表將範圍 a 和 b 之間(包含)的所有十進位整數表示為二進位會需要用到多少個1
Sample Input
Sample Output