打卡信奥刷题(1044)用C++实现信奥 P1590 失踪的7

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 1t10000 1 ≤ n ≤ 2 32 − 1 1 \leq n \leq 2^{32}-1 1n2321

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考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值