#入門級CF1766A題解
這是一道學完循環結構就可以去做的入門級的題目。
題目鏈接
翻譯一下:
如果一個正整數只有一個非零數字,我們將其稱為極圓整數。例如,5000、4、1、10、200是極圓整數;42、13、666、77、101不是。
給你一個整數n。你要計算極圓整數的數量x, 1 ≤ x ≤ n 1≤x≤n 1≤x≤n。
輸入:
第一行包含一個整數t(
1
≤
t
≤
1
0
4
1≤t≤10^4
1≤t≤104)-測試用例的數量。
然后,接下來有
t
t
t行。第
i
i
i行包含一個整數
n
(
1
≤
n
≤
999999
)
n(1≤n≤999999)
n(1≤n≤999999)。
輸出:
對于每個測試用例,輸出一個整數,表示極圓整數的數量
x
,
(
1
≤
x
≤
n
)
x,(1≤x≤n)
x,(1≤x≤n)
題解:
很明顯,極圓整數是固定的。
1位 1、2、3…9
2位10、20、30 … 90
3位100、200、300… 900
…
數據范圍是
n
(
1
≤
n
≤
999999
)
n(1≤n≤999999)
n(1≤n≤999999),所以大就是
6位100000、200000、300000、…、900000
給的每個數字n,其實就是在找1~n范圍里計數所有的極圓整數的個數。
其實就是需要知道n是幾位的數字(假設是m位),然后n的最高位數字是d,那么計數器cnt+=d,然后接下來cnt+=(m-1)*9即可。
總而言之,這道題就演變成了,求n是幾位數字,并且最高位是幾。
怎么求n是幾位數字?
while循環 不斷整除100000、10000、1000、100、10、1,當整除的結果不為零,那么就可以break了,記錄位數m即可。
參考代碼:
#includeusing namespace std;
int main()
{int t,n,x,m,cnt,f;
cin>>t;
while(t--)
{cin>>n;
x=100000;
m=6;
cnt=0;
f=n/x;
while(f==0)
{ x/=10;
f=n/x;
m--;
}
cnt+=f;
cnt+=(m-1)*9;
cout<
你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
當前文章:入門級CF1766A題解-創新互聯
本文來源:http://www.yijiale78.com/article16/pgsgg.html
成都網站建設公司_創新互聯,為您提供響應式網站、網站導航、服務器托管、虛擬主機、微信小程序、Google
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯