Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

จำนวนหลักหนึ่งใน C++


สมมติว่าเรามีตัวเลข n เราต้องนับจำนวนรวมของหลัก 1 ที่ปรากฏในตัวเลขที่ไม่ติดลบทั้งหมดน้อยกว่าหรือเท่ากับ n ดังนั้นหากอินพุตคือ 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 แล้ว

      • ret =ret + (a / 10) * i + (b + 1)

    • มิฉะนั้นเมื่อ x เท่ากับ 0 แล้ว −

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

    • มิฉะนั้น

      • ret =ret + (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