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

Tìm tổng các chữ số theo giai thừa của một số trong C ++


Giả sử, chúng ta có một số n, nhiệm vụ của chúng ta là tìm tổng các chữ số trong đó !. Xét n =5 thì n! =120. Vậy kết quả sẽ là 3.

Để giải quyết vấn đề này, chúng ta sẽ tạo một vectơ để lưu trữ các chữ số giai thừa và khởi tạo nó bằng 1. Sau đó nhân 1 với n lần lượt cho vectơ. Bây giờ tính tổng tất cả các phần tử trong vectơ và trả về tổng

Ví dụ

#include<iostream>
#include<vector>
using namespace std;
void vectorMultiply(vector<int> &v, int x) {
   int carry = 0, res;
   int size = v.size();
   for (int i = 0 ; i < size ; i++) {
      int res = carry + v[i] * x;
      v[i] = res % 10;
      carry = res / 10;
   }
   while (carry != 0) {
      v.push_back(carry % 10);
      carry /= 10;
   }
}
int digitSumOfFact(int n) {
   vector<int> v;
   v.push_back(1);
   for (int i=1; i<=n; i++)
      vectorMultiply(v, i);
   int sum = 0;
   int size = v.size();
   for (int i = 0 ; i < size ; i++)
      sum += v[i];
   return sum;
}
int main() {
   int n = 40;
   cout << "Number of digits in " << n << "! is: " << digitSumOfFact(n);
}

Đầu ra

Number of digits in 40! is: 189