কম্পিউটার টিউটোরিয়াল

C++-এ সংখ্যাকে একক ডিজিটে রিডিউস করার পর্যন্ত ডিজিট সম ও গুণফলের সর্বোচ্চ মান বের করার প্রোগ্রাম


সমস্যা বিবরণ

একটি সংখ্যা দেওয়া থাকলে, এর ডিজিটগুলোর সম এবং গুণফল বের করুন। প্রতিটি ফলাফলকে আবার ডিজিট সম/গুণফল করে একক ডিজিটে আনার পর্যন্ত চালিয়ে যান। দুটি ফলাফলের সর্বোচ্চ মান বের করুন।

সমাধানের পদ্ধতি

ডিজিট সম (Digital Root):

  • n == 0 → 0
  • n % 9 == 0 → 9
  • অন্যথায় n % 9

ডিজিট গুণফল (Multiplicative Digital Root):

  • প্রতিটি ডিজিট গুণ করুন।
  • ফলাফল > 9 হলে, তার ডিজিটগুলোর গুণফল করুন।
  • একক ডিজিট হলে বন্ধ।

C++ কোড উদাহরণ

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

long repeatedSum(long n) {
    if (n == 0) return 0;
    return (n % 9 == 0) ? 9 : (n % 9);
}

long repeatedProduct(long n) {
    long prod = 1;
    while (n > 0 || prod > 9) {
        if (n == 0) {
            n = prod;
            prod = 1;
        }
        prod *= n % 10;
        n /= 10;
    }
    return prod;
}

long maxSumProduct(long N) {
    if (N < 10) return N;
    return max(repeatedSum(N), repeatedProduct(N));
}

int main() {
    long n = 631;
    cout << maxSumProduct(n) << endl;
    return 0;
}

আউটপুট

8

ব্যাখ্যা

n = 631

ডিজিট সম: 6+3+1=10 → 1+0=1 (ডিজিটাল রুট: 631%9=1)

ডিজিট গুণফল: 6×3×1=18 → 1×8=8

সর্বোচ্চ: max(1, 8) = 8

জটিলতা

  • সময়: O(log n) — ডিজিট সংখ্যা অনুপাতিক
  • স্থান: O(1)
  1. একটি সংখ্যা এবং তার সর্বোচ্চ প্রাইম ফ্যাক্টরের যোগফল (C++)

  2. সংখ্যার সম ও বিষম স্থানের অঙ্কের যোগফল বের করা C++-তে

  3. C++-এ সিংগেল ডিজিট প্রাইমের মিনিমাম সংখ্যা যাদের সম N সমান

  4. C++ প্রোগ্রাম: সংখ্যার ডিজিট যোগফল একক ডিজিট হয় পর্যন্ত