Computer >> Máy Tính >  >> Lập trình >> C ++

Truy vấn tổng của các tổng chữ số lẻ của tất cả các thừa số của một số trong C ++

Trong chương trình này, chúng ta được cung cấp Q truy vấn, mỗi truy vấn có một số nguyên dương N. Nhiệm vụ của chúng ta là tạo một chương trình để giải quyết các truy vấn về tổng các chữ số lẻ của tất cả các thừa số của một số trong C ++.

Mô tả sự cố - Để giải từng truy vấn, ta cần tìm tất cả các thừa số của số N. Sau đó cộng tất cả các thừa số có tổng chữ số là lẻ. Và trả về tổng cuối cùng cho mỗi truy vấn.

Hãy lấy một ví dụ để hiểu vấn đề,

Đầu vào

Q = 2, queries = {15, 8}

Đầu ra

8 1

Giải thích

Đối với truy vấn 1:N =15, các thừa số của 15 là 1, 3, 5, 15.

tổng các chữ số lẻ trong thừa số là 1 + 3 + 5 =8

Đối với truy vấn 2:N =8, các hệ số của 8 là 1, 2, 4, 8.

tổng các chữ số lẻ trong thừa số là 1 =1

Phương pháp tiếp cận giải pháp

Để giải bài toán này, chúng ta cần tính tổng các chữ số lẻ của tất cả các số. Từ đó, chúng tôi sẽ tính toán các yếu tố và sau đó cộng chúng để có kết quả. Thực hiện quy trình tổng của từng chữ số này mà chúng ta có thể sử dụng các giá trị được tính toán trước. Ví dụ, tổng số 41 có thể được tìm thấy là tổng các chữ số lẻ của 4 + các chữ số lẻ của 3.

Sau khi tạo mảng retailDigitSum, chúng ta sẽ tìm tất cả các số chia nhỏ số đã cho. Sau đó, chúng tôi sẽ thêm tất cả các chữ số lẻ bằng mảng theoddDigitSum.

Chương trình minh họa hoạt động của giải pháp của chúng tôi,

Ví dụ

#include <iostream>
using namespace std;
#define N 99999

void calcOddDigitSum(int oddDigitSum[]) {

   for (int i = 1; i < N; i++)
   oddDigitSum[i] = oddDigitSum[i / 10] + (i & 1) * (i % 10);
}

void findFactorSum(int oddDigitSum[], int factorSum[]) {

   for (int i = 1; i < N; i++)
   for (int j = i; j < N; j += i)
   factorSum[j] += oddDigitSum[i];
}

int main(){
   int Q = 3;
   int query[] = { 5, 154, 98 };
   int oddDigitSum[N];
   int factorSum[N];
   calcOddDigitSum(oddDigitSum);
   findFactorSum(oddDigitSum, factorSum);
   for (int i = 0; i < Q; i++)
   cout<<"For query "<<(i+1)<<": The sum of odd number digit sums of all the factors of a number is "<<factorSum[query[i]]<<endl;
   return 0;
}

Đầu ra

For query 1: The sum of odd number digit sums of all the factors of a
number is 6
For query 2: The sum of odd number digit sums of all the factors of a
number is 31
For query 3: The sum of odd number digit sums of all the factors of a
number is 27