P151PROI - ROUND 1I - Chữ số cuối cùng

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

  • Problem:

Thấy Tí rất thích thú với những con số, cô giáo đã giao cho Tí một bài tập về rút gọn các con số. Phép rút gọn được thực hiện như sau: từ một số ban đầu, số mới được tạo thành bằng cách cộng các chữ số của số ban đầu với nhau. Sau đó Tí phải thực hiện tiếp tục với con số vừa mới thu được.  
Quá trình rút gọn kết thúc khi số thu được chỉ có duy nhất 1 chữ số.  
Các bạn hãy cùng Tí đi tìm chữ số cuối cùng của phép rút gọn!
Input
Dòng đầu tiên gồm số lượng test T (T <= 100).  
T dòng tiếp theo, mỗi dòng gồm một số nguyên dương (<= 10^9).
Output
Hãy in ra chữ số cuối cùng sau khi thực hiện phép rút gọn.
Example:
Input
3
1009
167
102
Output:
1
5
3

  • Solution:

Bài này chỉ cần làm theo đề bài thôi:
Code dưới đây chia làm hai phần chính:
- Phần một: Kiểm tra một chữ số - Cái này chỉ cần kiểm tra xem có nằm trong đoạn [0, 9] là được.
- Phần hai: Tính tổng các chữ số đó - Áp dụng phương pháp chia lấy dư và chia lấy nguyên cho 10 để tách số.
VD: x = 198
mod = x%10 = 8 | x = x/10 = 19;
mod = x%10 = 9 | x = x/10 = 1;
mod = x%10 = 1 | x = x/10 = 0;
Tổng tất cả các mod = 8 + 9 + 1 = 18.
Việc lặp dừng cho đến khi x là một số có một chữ số.

  • Code:

https://ideone.com/I6dgtA

C++:

#include <iostream>
using namespace std;

int OneDigit(int x) //Kiem tra xem co phai 1 chu so hay khong?
{
    if (x>=0 && x<=9)
       return 1;
    return 0;
}

int SumOfDigits(int x) //Tinh tong cac chu so cua mot so
{
    int S = 0;
    while (x!=0)
    {
        int mod = x%10;
        S+=mod;
        x=x/10;
    }
    return S;
}

int FinalDigit (int x)
{
    while (1)
    {
        if (OneDigit(x)==1)
           break;
    
        x = SumOfDigits(x);
    }
    return x;
}

int main ()
{
    int T;
    cin>>T;
    while (T--)
    { 
        int x;
        cin>>x;
        cout<<FinalDigit(x)<<endl;
    }
    return 0;
}

JAVA:

...

Python:

...

Share this

Related Posts

Previous
Next Post »