Biểu thức tổng đặc biệt


Submit solution

Points: 3
Time limit: 1.0s
Memory limit: 250M

Author:
Problem type
Allowed languages
Ada, Assembly, Awk, C, C++, C11, CLANG, CLANGX, Classical, COBOL, Coffee, CSC, D lang, DART, F95, FORTH, Fortrn, GAS32, GO, Haskell, Itercal, Java, kotlin, LEAN, LISP, LUA, MONOVB, Nasm, OCAML, Pascal, Perl, php, PIKE, prolog, Pypy, Python, Ruby 2, RUST, Scala, SCM, SED, SWIFT, TCL, TUR, V8JS, VB, ZIG

Cho một xâu S chỉ gồm các chữ số từ '1' đến '9'. Bạn có thể thêm một vài dấu '+' và giữa 2 chữ số bất kỳ để tạo thành một biểu thức tổng. Chú ý không được chèn 2 dấu '+' liên tiếp nhau hoặc chèn vào đầu và cuối xâu. Nhiệm vụ của bạn là tính tổng tất cả các giá trị của các biểu thức tổng thu được theo cách mô tả trên.

Input:

  • Dòng đầu tiên gồm xâu S, |S| là ký hiệu độ dài xâu.
  • (1|S|10)

Output:

Giá trị tổng thu được của tất cả các biểu thức có thể tạo ra.

Example 1:

Input:

Copy
345

Output:

Copy
444

Explanation:

  • Có 4 biểu thực có thể được tạo ra là 345, 34 + 5, 3 + 45, 3 + 4 + 5.
  • Giá trị của từng biểu thức là :
  • 345
  • 34 + 5 = 39
  • 3 + 45 = 48
  • 3 + 4 + 5 = 12
  • Tổng các giá trị là : 345 + 39 + 48 + 12 = 444

Example 2:

Input:

Copy
999999999

Output:

Copy
1265621760

Comments


  • -2
    tuongTran  commented on March 2, 2024, 11:04 a.m.

    include <iostream>

    include <string>

    include <cmath>

    using namespace std;

    long long calculateSum(string s) { int n = s.length(); int numExpressions = pow(2, n - 1); long long sum = 0;

    Copy
    for (int i = 0; i < numExpressions; i++) {
        long long currentSum = 0;
        long long currentNum = s[0] - '0';
    
        for (int j = 1; j < n; j++) {
            if ((i >> (j - 1)) & 1) {
                currentSum += currentNum;
                currentNum = 0;
            }
            currentNum = currentNum * 10 + (s[j] - '0');
        }
    
        currentSum += currentNum;
        sum += currentSum;
    }
    
    return sum;

    }

    int main() { string s; cout << "Nhập xâu S: "; cin >> s;

    Copy
    long long sum = calculateSum(s);
    
    cout << "Tổng các giá trị của các biểu thức tổng: " << sum << endl;
    
    return 0;

    }