题目描述
牛牛因为数学太差被老师赶出教室了,虽然老师侵犯了牛牛的公平教育权,但是牛牛在教室 外的小卖部大彻大悟,提升了自己的数学水平。
故事是这样的:学校里的小卖部里有一个活动:只要有三个饮料瓶就可以换一瓶新的饮料。
现在牛牛从路边捡到了 10 个饮料瓶,于是牛牛开始兑换饮料。他的兑换操作如下:先用 9个饮料瓶换 3 瓶饮料,喝完。然后手里有 4 个饮料瓶,再拿出 3 个换 1 瓶饮料,这时手里有 2 个饮料瓶。牛牛再问老板借 1 瓶饮料,喝完之后又多了 1 个饮料瓶,然后拿 3 个饮料瓶换一瓶饮料还给老板。
有借有还,再借不难。在这个过程中,牛牛总共喝了 5 瓶饮料。
牛牛现在有 ? 个饮料瓶,小卖部的活动是每 ? 个饮料瓶能换一瓶饮料,牛牛最多能喝几瓶饮料?
牛牛已经大彻大悟,现在他拿这道题来考你,他希望你和他一样大彻大悟。
输入格式
输入包含两个正整数 n, k;
n <= 1e100005, k <= min(1e9, n);
输出格式
输出一行一个整数表示答案。
样例 1 输入
10 3
样例 1 输出
5
样例 2 输入
10 4
样例 2 输出
3
30 分代码如下:
#include <bits/stdc++.h>
using namespace std;
const int N = 510;
int a[N], s[N];
int main() {
string s1;
long long b;
cin >> s1 >> b;
b -= 1;
int len1 = s1.size();
for (int i = 0; i < len1; i++)
a[i + 1] = s1[i] - '0';
int r = 0;
for (int i = 1; i <= len1; i++) {
s[i] = (r * 10 + a[i]) / b;
r = (r * 10 + a[i]) % b;
}
int len3 = 1;
while(s[len3] == 0 && len3 < len1) len3++;
for (int i = len3; i <= len1; i++)
cout << s[i];
return 0;
}