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

การลบขั้นต่ำในจำนวนที่จะหารด้วย 10 ยกกำลังยกเป็น K ใน C++


คำชี้แจงปัญหา

กำหนดจำนวนเต็มบวกสองจำนวน N และ K ค้นหาจำนวนหลักขั้นต่ำที่สามารถลบออกจากตัวเลข N ได้ โดยที่หลังจากลบออกแล้ว ตัวเลขจะหารด้วย 10K ลงตัว พิมพ์ -1 ถ้าเป็นไปไม่ได้

ตัวอย่าง

ถ้า N =10203027 และ K =2 เราต้องลบ 3 หลัก ถ้าเราลบ 3, 2 และ 7 ออก ตัวเลขจะกลายเป็น 10200 ซึ่งหารด้วย 102 ลงตัว

อัลกอริทึม

<ก่อน>1. เริ่มการข้ามผ่านหมายเลขจากจุดสิ้นสุด หากตัวเลขปัจจุบันไม่ใช่ศูนย์ ให้เพิ่มตัวแปรตัวนับ มิฉะนั้น ให้ลดตัวแปร K2 ถ้า K เป็นศูนย์ ให้คืนค่าตัวนับเป็นคำตอบที่ 3 หลังจากข้ามจำนวนเต็มแล้ว ให้ตรวจสอบว่าค่าปัจจุบันของ K เป็นศูนย์หรือไม่ หากเป็นศูนย์ ให้คืนค่าตัวนับเป็นคำตอบ มิฉะนั้น ให้คืนค่าคำตอบเป็นตัวเลขใน N –14 หากตัวเลขที่ระบุไม่มีศูนย์ ให้คืนค่า -1 เป็นคำตอบ

ตัวอย่าง

#include ใช้เนมสเปซ std;int getBitsToBeRemoved (int n, int k) { string s =to_string (n); ผลลัพธ์ int =0; int zeroFound =0; สำหรับ (int i =s.size () - 1; i>=0; --i) { if (k ==0) { ส่งคืนผลลัพธ์; } ถ้า (s [i] =='0') { zeroFound =1; --k; } อื่น ๆ { ++ผลลัพธ์; } } if (!k) { ส่งคืนผลลัพธ์; } อื่น ๆ ถ้า (zeroFound) { return s.size() - 1; } return - 1;}int main() { int n =10203027; int k =2; cout <<"ต้องมีการลบขั้นต่ำ =" < 

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้น มันสร้างผลลัพธ์ดังต่อไปนี้

ผลลัพธ์

ลบขั้นต่ำที่จำเป็น =3