Educational Codeforces Round 66 (Rated for Div. 2)A. From Hero to Zero

You are given an integer n and an integer k.

In one step you can do one of the following moves:

decrease n by 1;
divide n by k if n is divisible by k.
For example, if n=27 and k=3 you can do the following steps: 27→26→25→24→8→7→6→2→1→0.

You are asked to calculate the minimum number of steps to reach 0 from n.

Input
The first line contains one integer t (1≤t≤100) — the number of queries.

The only line of each query contains two integers n and k (1≤n≤1018, 2≤k≤1018).

Output
For each query print the minimum number of steps to reach 0 from n in single line.

Example
inputCopy
2
59 3
1000000000000000000 10
outputCopy
8
19
Note
Steps for the first test case are: 59→58→57→19→18→6→2→1→0.

In the second test case you have to divide n by k 18 times and then decrease n by 1.

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long
#define dd double
using namespace std;

int main() {
	ll t;
	cin >> t;
	while (t--) {
		ll n, m;
		cin >> n >> m;
		ll sum = 0;
		ll flag = 0;
		if (m > n) {
			cout << n << endl;
			continue;
		}
		else if (n == m) {
			if (n == m && n == 1) {
				cout << "1" << endl;
			}
			else {
				cout << "2" << endl;
			}
			continue;
		}
		else {
			while (n != 0) {
				ll yu;
				if (m > n) {
					sum += n;
					cout << sum << endl;
					flag = 1;
					break;
				}
				if (n % m == 0) {
					n = n / m;
					sum++;
				}
				else {
					yu = n % m;
					n -= yu;
					sum += yu;
				}
			}
			if (flag == 0) {
				cout << sum << endl;
			}
		}
	}
}

你可能感兴趣的:(codeforces)