ด้วยจำนวนเต็ม N ภารกิจคือการแทนที่ 0 ทั้งหมดที่ปรากฏในตัวเลขด้วย '5' อย่างไรก็ตาม หมายเลขที่มี '0' นำหน้าไม่สามารถแทนที่ด้วย '5' เนื่องจากยังคงไม่เปลี่ยนแปลง ตัวอย่างเช่น
อินพุต-1 −
N= 1007
ผลผลิต −
1557
คำอธิบาย − จำนวนที่กำหนดมีศูนย์ 2 ตัว ซึ่งเมื่อแทนที่ด้วย '5' ผลลัพธ์ที่ได้จะเป็น 1557
อินพุต-2 −
N = 00105
ผลผลิต −
155
คำอธิบาย − เนื่องจากตัวเลขที่ระบุขึ้นต้นด้วย '0' นำหน้าซึ่งสามารถละเว้นได้ และเอาต์พุตหลังจากแทนที่ 0 ตรงกลางด้วย '5' ผลลัพธ์ที่ได้จะเป็น 155
แนวทางในการแก้ปัญหานี้
ในการแทนที่ 0 ทั้งหมดในตัวเลขที่กำหนดด้วย '5' เราสามารถค้นหาและแยกตัวเลขหลักสุดท้ายของตัวเลขได้ หากหลักสุดท้ายของตัวเลขนั้นเป็น '0' ให้เปลี่ยนและแทนที่ค่าด้วย '5' และแยกตัวเลขอื่นออกมา อย่างไรก็ตาม จะต้องละเว้น '0' นำหน้าใดๆ ในตัวเลขที่กำหนด
ปัญหาสามารถแก้ไขได้โดยใช้วิธีการเรียกซ้ำ โดยเราจะแยกตัวเลขหลักสุดท้ายออกก่อน จากนั้นจึงเรียกใช้ฟังก์ชันเดียวกันอีกครั้งในขณะที่แยกหลักอื่นๆ ของหมายเลขนั้น
-
ป้อนตัวเลข N.
-
ฟังก์ชัน Integer converToFive(int N) รับตัวเลขเป็นอินพุตและส่งกลับตัวเลขที่แก้ไขโดยแทนที่ 0 ทั้งหมดด้วย '5'
-
ในกรณีฐาน ถ้าตัวเลขเป็น '0' ให้คืนค่า 0 มิฉะนั้น ให้แยกหลักสุดท้ายของตัวเลขนั้นแล้วตรวจสอบ
-
หากหลักสุดท้ายของตัวเลขคือ '0' ให้แทนที่ค่าด้วย '5'
-
ส่งคืนฟังก์ชันแบบเรียกซ้ำซึ่งนำตัวเลขอื่นของตัวเลขมาหารด้วย '10' และคูณด้วย '10'
-
ส่งคืนผลลัพธ์ที่แยกตัวเลขหลักสุดท้ายโดยการเพิ่มเข้าไป
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; int convertToFive(int N) { if(N==0){ return 0; } int last_digit= N%10; if(last_digit==0) last_digit=5; return convertToFive(N/10)*10 +last_digit; } int main() { int N= 14006; cout << convertToFive(N) << endl; }
ผลลัพธ์
หากเราจะเรียกใช้โค้ดด้านบน มันก็จะพิมพ์ผลลัพธ์เป็น,
14556
เนื่องจากตัวเลขที่ระบุมี 0 สองตัว หลังจากแทนที่หมายเลข 14006 แล้ว มันจะกลายเป็น 14556