信息学奥赛一本通 1095:数1的个数 | OpenJudge NOI 1.5 40
生活随笔
收集整理的這篇文章主要介紹了
信息学奥赛一本通 1095:数1的个数 | OpenJudge NOI 1.5 40
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【題目鏈接】
ybt 1095:數1的個數
OpenJudge NOI 1.5 40:數1的個數
【題目考點】
1. 分離整數的各位數字
對于數字a,a%10可以取到其個位,a/=10(整除)可以去掉其當前個位。
重復這一過程,即可從低位到高位分離各位上的數字。
例:分離數字123的各位數
| 123 | 3 | 12 |
| 12 | 2 | 1 |
| 1 | 1 | 0 |
每次循環中,a變為a/10,循環中取a%10,為當前a的個位,即為分離出的數字。當a為0時循環結束。
其原理為對數字的按位權展開。
例:輸入一個整數,從低位到高位輸出其各位數字,并用空格分隔,代碼為:
【解題思路】
- 分離該數字的各位數字,統計其中1的個數。
【題解代碼】
解法1:設函數,求一個數中1的個數
#include<bits/stdc++.h> using namespace std; int count1(int n)//求數字n中1的個數 {int ct = 0;//計數for(int a = n; a > 0; a /= 10){if(a % 10 == 1)ct++;}return ct; } int main() {int n, ct = 0;//ct:計數cin>>n;for(int i = 1; i <= n; ++i)//統計1~n中1的個數ct += count1(i);cout<<ct<<endl;return 0; }解法2:將邏輯都寫在主函數中
#include<bits/stdc++.h> using namespace std; int main() {int n, ct = 0;//ct:計數cin>>n;for(int i = 1; i <= n; ++i)//統計1~n中1的個數{for(int j = i; j > 0; j /= 10){if(j % 10 == 1)ct++;}}cout<<ct<<endl;return 0; } 新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!總結
以上是生活随笔為你收集整理的信息学奥赛一本通 1095:数1的个数 | OpenJudge NOI 1.5 40的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信息学奥赛一本通 2005:【20CSP
- 下一篇: 控制台双缓冲防闪烁--功能封装