ural 1261. Tips(进制运算)

1261. Tips

Time limit: 1.0 second
Memory limit: 64 MB
The favorite resting place of the Ural programmers is Threenland island. There is only one tribulation: dollars and euro don’t go about here. So the tourists are to exchange their money into threets (the currency of Threenland). There go about 1 threet, 3 threets, 9 threets, 27 threets, …, 3k threets, … Once programmer Vasechkin, after the N-threets bill was given to him found out, that he’d got one paper of each denomination. Waiters in Threenland have a custom to keep the change. Waiters like to get the tip that can be presented by a set of papers in which paper of each denomination appears not more than once. Otherwise their feelings are hurt. They have a peeve on a client if they don’t get tips at all. Help please Vasechkin to pay for the dinner and not to hurt the waiter.

Input

consists of an integer N. 1 ≤ N ≤ 107.

Output

Output two integers separated with a space – that is the sum that Vasechkin is to pay and an amount of tips. If there are several solutions choose any of them. If there is no solution output 0. Remember that Ural programmers are not rich, so Vasechkin can’t pay more than 4294967291 threets.

Sample

inputoutput
5
9 4

题意:给出一个数n,要求求出两个数a,b;a和b的3进制表示没有2;并且b+n=a;并且按a b的格式输出;

思路:利用进制运算的思想,将给出的数n变成3进制表示,然后再2出现的位置加1,直到没有了2为止,并且在加的过程中记录加数;最后这个加数便是b;

 1 #include <iostream>
 2 using namespace std;
 3 int tip=0,bill=0,n,m=1;
 4 int main()
 5 {
 6     cin >> n;
 7     bill=n;
 8     do
 9     {
10         if (n%3==2)
11         {
12             tip+=m;
13             ++n;
14         }
15         n/=3,m*=3;
16     }while (n);
17     if (!tip)  tip=m;
18     cout <<bill+tip<< ' ' << tip << endl;
19     return 0;
20 }
View Code
原文地址:https://www.cnblogs.com/zhangchengbing/p/3416500.html