Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 숫자 1의 수


수 n이 있다고 가정하면 n보다 작거나 같은 모든 음수가 아닌 숫자에 나타나는 숫자 1의 총 수를 계산해야 합니다. 따라서 입력이 15이면 출력은 8이 됩니다. 1을 포함하는 숫자는 [1,10,11,12,13,14,15]이므로 8개의 1이 있기 때문입니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 렛 :=0

  • i를 초기화하기 위해 :=1, i <=n일 때 i =i * 10 do −

    • a :=n / i, b :=n mod i, x :=a mod 10

    • x가 1과 같으면

      • 레트 =레트 + (a / 10) * 나는 + (b + 1)

    • 그렇지 않으면 x가 0과 같을 때 -

      • 렛 =렛 + (a / 10) * i

    • 그렇지 않으면

      • 렛 =렛 + (a / 10 + 1) * i

  • 리턴 렛

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int countDigitOne(int n) {
      int ret = 0;
      for(long long int i = 1; i <= n; i*= (long long int)10){
         int a = n / i;
         int b = n % i;
         int x = a % 10;
         if(x ==1){
            ret += (a / 10) * i + (b + 1);
         }
         else if(x == 0){
            ret += (a / 10) * i;
         } else {
            ret += (a / 10 + 1) *i;
         }
      }
      return ret;
   }
};
main(){
   Solution ob;
   cout << (ob.countDigitOne(15));
}

입력

15

출력

8