#37660: 基礎解法


yp11151119@yphs.tp.edu.tw (911-36張鈞晏)

學校 : 臺北市私立延平高級中學
編號 : 197210
來源 : [203.72.178.3]
最後登入時間 :
2024-12-02 14:43:26
a414. 位元運算之進位篇 -- c910335 | From: [203.72.178.1] | 發表日期 : 2023-09-25 17:43

#include<stdio.h>//a414. 位元運算之進位篇
/*提示 :因為本題測資檔較大,請使用 scanf 輸入、 printf 輸出。
scanf:
函數功能:    輸入
運用: scanf("格式控制符",地址列表);
優點: 比cin省時
歷史: 本是c語言之輸入
格式控制符:
d:輸入十進位制整數
u:輸入無符號整數
o:輸入八進位制整數
x:輸入十六進位制整數
c:輸入單個字元
s:輸入字串(輸入時以非空格開始,空格結束,自動填補成以'\0' 為結尾)
f:輸入浮點數float
l:可用於整型、實型(例:%ld、%lf(double))
*/
int main(){
int n;
while(scanf("%d",&n), n!=0)/*&取址運算子*/{
int ans=0;
while(n!=0){
int b=n%2;//b==每位除二餘數=二進位的一位 
//以下參連除法
n/=2;
if(b==0) break;
else ans++;//二進位的最低位元起,有幾個連續的1,加1後就會進位幾次 EX:111+1=1000 
}
printf("%d\n", ans);
}
return 0;
}
/*
內容
一個數在電腦裡遞增時需要進位幾次。
 
輸入說明
輸入的每一行有一個十進制正整數 N (1<=N<=2147483647)。輸入的最後一行有一個 0,代表輸入的結束,
這個數字請勿做任何處理。
 
輸出說明
對於每個正整數 N ,請輸出以二進制計算 N+1 時所需的進位次數。 
 
範例輸入 #1 解釋: 
1     1+1 
4     100+1 
7     111+1 
17     10001+1 
0    
_________________________________________________________________________________________________ 
EX:7.625: 
 
7:連除法
7/2=3...'1' 3/2=1...'1' 1/2=0...'1' ----> 7==>111  
 
0.625:連乘法
0.625*2='1'.250 1.250%1=0.250
0.250*2='0'.50 0.50%1=0.50 ----> 0.625==>101 
0.50*2='1'.0(小數部分為0) 
 
7.625==>111.101 
_________________________________________________________________________________________________
範例輸出 #1
1
0
3
1
*/
 
ZeroJudge Forum