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

Số Disarium (Disarium Number) trong C++

Số Disarium là số mà tổng các chữ số của nó, mỗi chữ số lũy thừa theo vị trí của nó (tính từ trái sang phải, vị trí bắt đầu từ 1), bằng chính số đó.

Ví dụ: 175 -> 1¹ + 7² + 5³ = 1 + 49 + 125 = 175. (Là Disarium).
518 -> 5¹ + 1² + 8³ = 5 + 1 + 512 = 518. (Là Disarium).

Phương pháp giải

  1. Đếm số chữ số len của số n.
  2. Duyệt các chữ số từ trái sang phải (hoặc phải sang trái nhưng cần biết vị trí). Dễ nhất: chuyển sang string, duyệt ký tự.
  3. Tính tổng: sum += pow(digit, position).
  4. So sánh sum == n.

Chương trình C++

#include <iostream>
#include <cmath>
#include <string>
using namespace std;

bool isDisarium(int n) {
    string s = to_string(n);
    long long sum = 0;
    for (int i = 0; i < s.length(); i++) {
        int digit = s[i] - '0';
        int pos = i + 1; // Vị trí 1-based
        sum += pow(digit, pos);
        // Tránh tràn số nếu n lớn (Disarium hiếm, lớn nhất biết ~ 20 chữ số)
        if (sum > n) return false; 
    }
    return sum == n;
}

int main() {
    cout << "Cac so Disarium nho hon 1000000:\n";
    for (int i = 1; i < 1000000; i++) {
        if (isDisarium(i)) cout << i << " ";
    }
    cout << endl;
    
    int test = 518;
    cout << test << (isDisarium(test) ? " la " : " khong phai ") << "so Disarium." << endl;
    return 0;
}

Đầu ra

Cac so Disarium nho hon 1000000:
1 2 3 4 5 6 7 8 9 89 135 175 518 598 1306 1676 2427 2646798 
518 la so Disarium.

Danh sách các số Disarium biết đến (cơ số 10): 1, 2, 3, 4, 5, 6, 7, 8, 9, 89, 135, 175, 518, 598, 1306, 1676, 2427, 2646798... (Rất hiếm).