Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Đếm số N chữ số sao cho num + Rev(num) = 10^N - 1 trong C++


Cho một số N làm đầu vào. Mục tiêu là tìm số lượng tất cả các số N chữ số mà tổng của nó với số đảo ngược bằng 10^N - 1.

num + rev(num) = 10^N - 1

Ví dụ

Đầu vào

N=4

Đầu ra

Số lượng số N chữ số thỏa mãn num + Rev(num) = 10^N - 1 là: 90

Giải thích

Các số sẽ là: 1. 1188 + 8811 = 9999 2. 2277 + 7722 = 9999 3. 1278 + 8721 = 9999 ...tổng cộng 90 số

Đầu vào

N=5

Đầu ra

Số lượng số N chữ số thỏa mãn num + Rev(num) = 10^N - 1 là: 0

Giải thích

Vì N là lẻ, sẽ không có số nào như vậy vì chữ số giữa sẽ được cộng với chính nó và không thể có tổng là 9. Ví dụ: 148+841=989

Phương pháp sử dụng

Đối với bất kỳ số N chữ số nào, tổng của nó với số đảo ngược sẽ là 999... (N lần) nếu tổng của các chữ số riêng lẻ trong cả hai số và số đảo ngược là 9. Trong trường hợp N lẻ, chữ số giữa sẽ được cộng với chính nó. Vì không có hai số nguyên giống nhau có tổng là 9 nên đáp án sẽ là 0. Trong trường hợp N chẵn, các cặp chữ số thứ 1-N, 2-(N-1), 3-(N-2)... sẽ phải có tổng là 9. Các cặp có thể là (1+8), (2+7), (3+6), (4+5), (5+4), (6+3), (7+2), (8+1), (9+0). Đáp án sẽ là 9 * 10^(N/2 - 1).

  • Nhận số nguyên N làm đầu vào.
  • Hàm digit_numbers(int N) nhận N và trả về số lượng các số N chữ số thỏa mãn num + Rev(num) = 10^N - 1.
  • Khởi tạo biến đếm ban đầu là 0.
  • Nếu N là lẻ, thì N%2 là 1. Trả về 0.
  • Ngược lại đặt count = 9 * pow(10, N/2 - 1).
  • Trả về biến đếm làm kết quả.

Ví dụ mã

#include <bits/stdc++.h> 
using namespace std; 

int digit_numbers(int N) {
    int count = 0;
    if (N % 2 == 1) {
        return 0;
    } else {
        count = 9 * pow(10, N/2 - 1);
    }
    return count;
}

int main() {
    int N = 4;
    cout << "Số lượng số N chữ số thỏa mãn num + Rev(num) = 10^N - 1 là: " << digit_numbers(N);
    return 0;
}

Đầu ra

Nếu chạy mã trên, sẽ tạo ra đầu ra sau:

Số lượng số N chữ số thỏa mãn num + Rev(num) = 10^N - 1 là: 90