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

พิมพ์ Substring ทั้งหมดของตัวเลขโดยไม่แปลงใน C++

ในปัญหานี้ เราจะได้รับจำนวนเต็ม n และต้องพิมพ์ substring ทั้งหมดของตัวเลขที่สามารถสร้างได้ แต่ห้ามแปลงเป็นสตริงหรืออาเรย์

ตัวอย่างเพื่อความเข้าใจ

Input: number = 5678
Output: 5, 56, 567, 5678, 6, 67, 678, 7, 78, 8

เพื่อแก้ปัญหานี้ เราต้องใช้ตรรกะทางคณิตศาสตร์ ที่นี่เราจะพิมพ์ most significant bit ก่อน แล้วค่อยพิมพ์ successive bits ต่อไป

อัลกอริทึม

ขั้นตอนที่ 1: หาตัวเลขกำลัง 10 ตามจำนวนหลัก
ขั้นตอนที่ 2: พิมพ์ค่าทาง recursion และหารตัวเลขด้วย 10 ทำซ้ำจนตัวเลขกลายเป็น 0
ขั้นตอนที่ 3: ตัด MSB ของตัวเลขออกและทำขั้นตอนที่ 2 ซ้ำกับตัวเลขนี้
ขั้นตอนที่ 4: ทำซ้ำจนตัวเลขกลายเป็น 0

โปรแกรมตัวอย่าง

#include <iostream>
#include <math.h>
using namespace std;

void printSubNumbers(int n);

int main() {
    int n = 6789;
    cout << "The number is " << n << " and the substring of number are :\n";
    printSubNumbers(n);
    return 0;
}

void printSubNumbers(int n) {
    int s = log10(n);
    int d = (int)(pow(10, s) + 0.5);
    int k = d;
    while (n) {
        while (d) {
            cout << (n / d) << " ";
            d = d / 10;
        }
        n = n % k;
        k = k / 10;
        d = k;
    }
}

ผลลัพธ์

The number is 6789 and the substring of a number are -

6 67 678 6789 7 78 789 8 89 9