Người Gửi: Dương Lee
- Problem:
Bạn có một chiếc xe với một công tơ mét để đo quãng đường đã đi. Rất không may mắn là công tơ mét của bạn bị lỗi, nó chuyển từ giá trị 3 sang giá trị 5 mà bỏ qua giá trị 4 trên tất cả các vị trí. Ví dụ hiện tại công tơ mét đang chỉ 15339 và bạn đi thêm 1km thì nó sẽ chỉ 15350 thay vì 15340. Hãy viết chương trình viết ra chính xác khoảng cách đã đi qua với một giá trị cho trước trên công tơ mét bị lỗi như trên.
Input
Có nhiều bộ test, mỗi bộ test là một dòng ghi một số nguyên trong khoảng 1..999999999 mô tả giá trị ghi trên công tơ mét (tất nhiên không có chữ số 4 trong giá trị này). Input kết thúc với dòng có giá trị 0.
Output
Với mỗi bộ test, in ra màn hình một dòng theo định dạng như trong ví dụ (giá trị ghi trên công tơ mét: giá trị khoảng cách thực tế).
Example:
Input
13
15
2003
2005
239
250
1399
1500
999999
0
Output:
13: 12
15: 13
2003: 1461
2005: 1462
239: 197
250: 198
1399: 1052
1500: 1053
999999: 531440
- Solution:
*Nói dễ hiểu thì nó sẽ thế này: Cứ một số nhảy lên thì chỉ cần có 9 vòng quay sau nó (vì mất 1 con 4). Vậy chỉ cần tính số vòng nó đã quay được là tính được số km thực.
**Ak: Còn phải cộng cả các số km lẻ hiện tại của công tơ nữa, nếu chỉ số lẻ >4 thì bớt đi 1 (vì mất 1 con 4).
- Code:
#include <iostream>
using namespace std;
int main ()
{
while (1)
{
string Num;
cin>>Num;
if (Num=="0") break;
long long S=0;
for (int i=0; i<Num.length(); i++)
{
int so=Num[i]-'0';
if (so>4) so--;
S=S*9+so;
}
cout<<Num<<": "<<S<<endl;
}
return 0;
}