P1590 失踪的7
题目描述
远古的 Pascal 人也使用阿拉伯数字来进行计数,但是他们又不喜欢使用 7 7 7 ,因为他们认为 7 7 7 是一个不吉祥的数字,所以 Pascal 数字 8 8 8 其实表示的是自然数中的 7 7 7, 18 18 18 表示的是自然数中的 16 16 16 。请计算,在正整数 n n n 范围以内包含有多少个 Pascal 数字。
输入格式
第一行为正整数 t t t,接下来 t t t 行,每行一个正整数 n n n,且保证输入 n n n 的是 Pascal 数字
输出格式
对于每个正整数 n n n,输出 n n n 以内的 Pascal 数的个数。
输入输出样例 #1
输入 #1
2
10
20
输出 #1
9
18
说明/提示
对于所有数据, 1 ≤ t ≤ 10000 1 \leq t \leq 10000 1≤t≤10000, 1 ≤ n ≤ 2 32 − 1 1 \leq n \leq 2^{32}-1 1≤n≤232−1。
C++实现
#include <bits/stdc++.h>//万能头
int T;
std :: string s;
int main() {
std :: scanf(“%d”, &T);
while (T–) { //多组数据测试时推荐这么写!
std :: cin >> s;
for (int i = 0; i < s.length(); ++i) {
if (s[i] == ‘7’) {
s[i] = ‘6’;//先把这一位标记为6
for (int j = i + 1; j < s.length(); ++j)
s[j] = ‘9’;//之后所有标记为9
break;
}
}
int ans = 0; //初始化ans
for (int i = s.length() - 1, atr = 1; i >= 0; --i, atr *= 9)
ans += atr * (s[i] - ‘0’) - (s[i] - ‘0’ > 7 ? atr : 0);
std :: printf(“%d\n”, ans); //输出答案
}
return 0;
}
后续
接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容