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

นับจำนวนหลักตั้งแต่ 1 ถึง N ใน C++


เราได้รับตัวเลข N เป็นอินพุต เป้าหมายคือการนับจำนวนหลักทั้งหมดระหว่างตัวเลข 1 ถึง N 1 ถึง 9 ต้องใช้ตัวละ 1 หลัก 11 ถึง 99 ต้องใช้ตัวละ 2 หลัก 100 ถึง 999 ต้องใช้ 3 หลักต่อไปเรื่อยๆ

ให้เราเข้าใจด้วยตัวอย่าง

ป้อนข้อมูล − N=11

ผลผลิต − นับจำนวนหลักทั้งหมดตั้งแต่ 1 ถึง N คือ 13

คำอธิบาย − ตัวเลข 1 ถึง 9 มีตัวละ 1 หลัก :9 หลัก 10, 11 มีตัวละ 2 หลัก 4 หลัก. ตัวเลขทั้งหมด=9+4=13.

ป้อนข้อมูล − N=999

ผลผลิต − นับจำนวนหลักทั้งหมดตั้งแต่ 1 ถึง N คือ 2889

คำอธิบาย − ตัวเลข 1 ถึง 9 มีตัวละ 1 หลัก :9 หลัก 10 ถึง 99 มีตัวละ 2 หลัก :180 หลัก 100 ถึง 999 มี 3 หลัก :2700 หลัก รวมทั้งหมด =2700 + 180 + 9 =2889 หลัก

แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้

เราจะใช้สองวิธี วิธีแรกแบบไร้เดียงสาโดยใช้ฟังก์ชันแบบเรียกซ้ำเพื่อคำนวณตัวเลขในจำนวนตัวเลข แปลง num ที่ส่งผ่านเป็นสตริง ความยาวของสตริงเป็นตัวเลขใน num ทำเช่นนี้สำหรับแต่ละหมายเลขที่ข้าม num-1 ปัจจุบันแบบเรียกซ้ำ

  • นำตัวเลขมาเป็นจำนวนเต็มบวก

  • ฟังก์ชัน total_digits(int num) รับค่า num และคืนค่าหลักเป็นตัวเลขระหว่าง 1 ถึง num

  • ในการคำนวณตัวเลขใน num ให้แปลง num เป็นสตริง (to_string(num)).

  • ความยาวของสตริงมีตัวเลขเป็นตัวเลข

  • ถ้า num คือ 1 ให้คืนค่า 1 อย่างอื่น return length+ total_digits(num-1) สำหรับตัวเลขที่เหลือน้อยกว่า num

  • ในที่สุดเราจะได้ตัวเลขทั้งหมดเป็นผล

แนวทางที่มีประสิทธิภาพ

ในแนวทางนี้ เราจะใช้ตรรกะที่ว่าสำหรับแต่ละตัวเลขจนถึง N เราจะข้าม 10, 100, 1000 จนถึง N สำหรับแต่ละ 10i จำนวนหลักคือ (num-i + 1)

  • นำตัวเลขมาเป็นจำนวนเต็มบวก

  • ฟังก์ชัน total_digits(int num) รับค่า num และคืนค่าหลักเป็นตัวเลขระหว่าง 1 ถึง num

  • เริ่มนับรวมเป็น 0

  • ข้าม i=1 ถึง i<=num เพิ่ม i 10 ในการวนซ้ำแต่ละครั้ง และเพิ่ม num-i+1 เพื่อนับ

  • คืนค่าการนับที่ส่วนท้ายของลูปเป็นผลลัพธ์

ตัวอย่าง (แนวทางไร้เดียงสา)

#include <bits/stdc++.h>
using namespace std;
int total_digits(int num){
   string str = to_string(num);
   int length = str.length();
   if (num == 1){
      return 1;
   }
   return length + total_digits(num - 1);
}
int main(){
   int num = 20;
   cout<<"Count of total number of digits from 1 to n are: "<<total_digits(num);
   return 0;
}

ผลลัพธ์

หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -

Count of total number of digits from 1 to n are: 31

ตัวอย่าง (แนวทางที่มีประสิทธิภาพ)

#include <bits/stdc++.h>
using namespace std;
int total_digits(int num){
   int count = 0;
   for(int i = 1; i <= num; i *= 10){
      count = count + (num - i + 1);
   }
   return count;
}
int main(){
   int num = 20;
   cout<<"Count of total number of digits from 1 to n are: "<<total_digits(num);
   return 0;
}

ผลลัพธ์

หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -

Count of total number of digits from 1 to n are: 31