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

เขียนโปรแกรม C++ เพื่อแทนที่ 0 ทั้งหมดด้วย 5 ในตัวเลขที่กำหนด

ได้รับจำนวนเต็ม N งานคือแทนที่ 0 ทั้งหมดที่ปรากฏในตัวเลขด้วย '5' อย่างไรก็ตาม ตัวเลขที่มี 0 นำหน้า (leading zeros) ไม่สามารถแทนที่ด้วย 5 ได้ เพราะจะคงค่าเดิม ตัวอย่างเช่น

ตัวอย่างอินพุต 1

N = 1007

เอาต์พุต

1557

คำอธิบาย

ตัวเลขที่กำหนดมี 0 สองตัว ซึ่งเมื่อแทนที่ด้วย '5' จะได้เอาต์พุตเป็น 1557

ตัวอย่างอินพุต 2

N = 00105

เอาต์พุต

155

คำอธิบาย

เนื่องจากตัวเลขที่กำหนดเริ่มต้นด้วย 0 นำหน้าซึ่งสามารถข้ามได้ และเอาต์พุตหลังจากแทนที่ 0 กลางด้วย '5' จะได้ผลลัพธ์เป็น 155

วิธีการแก้ปัญหา

เพื่อแทนที่ 0 ทั้งหมดในตัวเลขที่กำหนดด้วย '5' เราสามารถหาและแยกตัวเลขหลักสุดท้ายของตัวเลขได้ หากหลักสุดท้ายของตัวเลขนั้นเป็น '0' ให้เปลี่ยนและแทนที่ค่าด้วย '5' และแยกตัวเลขอีกตัว อย่างไรก็ตาม 0 นำหน้าของตัวเลขที่กำหนดต้องถูกข้าม

ปัญหานี้สามารถแก้ได้โดยใช้วิธี recursion โดยเราจะแยกหลักสุดท้ายก่อน แล้วเรียกฟังก์ชันเดียวกันอีกครั้งขณะแยกตัวเลขอื่นของตัวเลขนั้น

  • รับอินพุตตัวเลข N
  • ฟังก์ชัน Integer convertToFive(int N) รับตัวเลขเป็นอินพุตและคืนค่าตัวเลขที่ปรับเปลี่ยนแล้วโดยการแทนที่ 0 ทั้งหมดด้วย '5'
  • ในกรณีฐาน (base case) ถ้าตัวเลขเป็น '0' ให้คืนค่า 0 มิฉะนั้นแยกหลักสุดท้ายของตัวเลขนั้นและตรวจสอบ
  • ถ้าหลักสุดท้ายของตัวเลขเป็น '0' ให้แทนที่ค่าด้วย '5'
  • คืนค่าฟังก์ชัน recursive ที่รับตัวเลขอื่นของตัวเลขโดยการหาร '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;
    return 0;
}

ผลลัพธ์

ถ้าเราจะรันโค้ดด้านบน จะพิมพ์เอาต์พุตเป็น

14556

เนื่องจากมี 0 สองตัวในตัวเลขที่กำหนด หลังจากแทนที่ตัวเลข 14006 จะกลายเป็น 14556