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

ตรวจสอบว่าสามารถแสดงหมายเลขที่กำหนดได้หรือไม่ ของตัวเลขในฐานใด ๆ ใน C++


สมมติว่าเรามีตัวเลข n และจำนวนหลัก d เราต้องตรวจสอบว่าตัวเลข n สามารถแสดงเป็นตัวเลข d หลักในฐานใดก็ได้ตั้งแต่ 2 ถึง 32 หรือไม่ สมมติว่าตัวเลข n คือ 8 และ d =4 จึงสามารถแสดงเป็น 1000 ในรูปแบบไบนารี โดยที่ d คือ 4 .

แนวคิดคือการตรวจสอบฐานทั้งหมดทีละตัวตั้งแต่ 2 ถึง 32 เราสามารถทำตามขั้นตอนเหล่านี้เพื่อตรวจสอบฐานได้

  • หากตัวเลขน้อยกว่าฐานและหลักเป็น 1 ให้คืนค่าเป็น true
  • หากหลักมากกว่าหนึ่งและตัวเลขมากกว่าฐาน ให้ลบหลักสุดท้ายออกจากตัวเลขโดยทำ num/base ซึ่งจะเป็นการลดจำนวนหลัก จากนั้นทำซ้ำซ้ำแล้วซ้ำอีก
  • มิฉะนั้นจะคืนค่าเท็จ

ตัวอย่าง

#include <iostream>
using namespace std;
bool isRepresentedInDDigits(int num, int d, int base) {
   if (d==1 && num < base)
      return true;
   if (d > 1 && num >= base)
      return isRepresentedInDDigits(num/base, --d, base);
      return false;
}
bool checkNumber(int num, int d) {
   // Check for all bases one by one
   for (int base=2; base<=32; base++)
      if (isRepresentedInDDigits(num, d, base))
         return true;
         return false;
}
int main() {
   int num = 8;
   int dig = 2;
   if(checkNumber(num, dig))
      cout << "Can be represented";
   else
      cout << "Can not be represented";
}

ผลลัพธ์

Can be represented