蓝桥云客--插入数字
6.插入数字【算法赛】 - 蓝桥云课
问题描述
在备战蓝桥杯的过程中,小蓝对数字变换的技巧产生了浓厚的兴趣。这天,他想到一个有趣的问题:
给定一个正整数 N,如果在 N 的开头、结尾,或者任意两个相邻数字之间插入一个数字 (0~9),可以得到多少种不同的新数字?需要注意的是,为了保证数字的有效性,插入后的数字不能以 0 开头。
例如,当 N=23 时,可以进行以下操作:
- 在开头插入 1,得到 123;
- 在结尾插入 5,得到 235;
- 在数字 2 和 3 之间插入 7,得到 273。
这些操作会产生不同的数字,但某些插入方式可能会导致重复结果(例如,在 23 的开头插入 2 和在 2 和 3 之间插入 2 都会得到 223)。现在,请你帮助小蓝编写一个程序,在给定 N 的情况下,计算出通过上述插入操作能得到的不同数字的种类数。
输入格式
输入包含一个正整数 N (1 ≤ N ≤ 10^{18}),即给定的正整数。
输出格式
输出一个整数,表示通过插入操作能得到的不同数字的种类数。
样例输入
9
样例输出
18
样例说明
能得到的不同数字有:19,29,39,49,59,69,79,89,90,91,92,93,94,95,96,97,98,99。
思路:
通过模拟可以得知,n个数有n+1个空要填,假设我们不担心重复情况,开头那个空不能填0,所以开头的空可以特判为1~9数字共9个,那么还有n个空都是0~9数字共10个.对于每一个数字都会出现一次重复情况,所以最后9+n*10-10即可
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
string s;
cin >> s;
int sum = 9 + 10*s.size() - s.size();
cout << sum;
return 0;
}