P163PROD - ROUND 3D - Nếu cuộc sống không có số 0

Link Sub: http://www.spoj.com/PTIT/problems/P163PROD/
Người Gửi: Dương Lee

  • Problem:

Bạn có thể tưởng tượng nếu một ngày chúng ra loại bỏ hết tất cả các số 0? Chắc chắn rằng nếu điều đó xảy ra thì sẽ có nhiều vấn đề phát sinh.  
Lấy một ví dụ đơn giản, giả sử ta có 3 số nguyên a, b, c và a + b = c. GIờ đây, nếu chúng ta bỏ hết các số 0 thì chưa chắc điều này còn đúng nữa. Nhiệm vụ của bạn là cho 2 số nguyên a, b và kiểm tra xem sau khi thực hiện phép cộng rồi xóa đi các số 0 thì kết quả của phép cộng còn đúng không.  
Ví dụ ta có: 101 + 102 = 203, sau đó xóa các số 0, ta có 11 + 12 = 23 và phép tính này vẫn đúng. Nhưng với trường hợp: 105 + 106 = 211, thì sau khi xóa các số 0 ta được 15 + 16 = 211 và phép tính này sai.
Input
Gồm 2 dòng, lần lượt chứa 2 số nguyên a và b (1 <= a, b <= 10^9).
Output
In ra “YES”, nếu sau khi xóa các số 0 mà kết quả phép tính vẫn đúng, in ra “NO” trong trường hợp ngược lại.
Example:
Input
101
102
Output:
YES

Input
105
106
Output:
NO
  • Solution:

- Bài này khá dễ khi làm theo đúng yêu cầu của đề:
Code C++ dưới đây sử dụng string để thuận tiện cho xử lí xóa số.
+ Tạo 3 hàm với các chức năng: chuyển long sang string, chuyển string sang long, xóa số 0
+ Với 3 hàm trên thì khi cần xóa số 0 ta chuyển dữ liệu về string, khi cần cộng số ta lại chuyển về long sau đó chỉ cần kiểm tra điều kiện là được.

  • Code:

C++:

https://ideone.com/0M7fQk
#include <iostream>
#include <string>
using namespace std;

long toNum (string s)
{
    long S = 0;
    for (int i=0; i<s.length(); i++)
    {
        int tmp = s[i] - '0';
        S = S*10 + tmp;
    }
    return S;
}

string toString (long x)
{
    string s = "";
    while (1)
    {
        char tmp = x%10 + '0';
        x /= 10;
        s = tmp + s;
        if (x==0) break;
    }
    return s;
}

string del_0 (string s)
{
    while (1)
    {
        int vt = s.length()-1;
        while (s[vt]!='0' && vt>=0) vt--;
        if (vt>=0)
            s.erase(s.begin()+vt, s.begin()+vt+1);
        else
            break;
    }
    return s;
}

int main ()
{
    string a, b;
    cin>>a>>b;
    
    long num_a = toNum (a);
    long num_b = toNum (b);
    long VT = toNum (del_0 (toString (num_a+num_b)));    //  (num_a+num_b) long -> string -> (delete 0) string -> long
    
    long num_a_not0 = toNum (del_0 (a));
    long num_b_not0 = toNum (del_0 (b));
    long VP = num_a_not0 + num_b_not0;
    
    if (VT==VP) cout<<"YES";
    else cout<<"NO";
    
    return 0;
}

JAVA:

...

Python:

...

Share this

Related Posts

Previous
Next Post »