小米OJ 22(找到第 N 个数字)

                                            找到第 N 个数字
                         序号:#22  难度:有挑战  时间限制:1000ms  内存限制:10M

描述
假如有一组字符串符合如下规律:

S1 = 1
S2 = 12
S3 = 123

S9 = 123456789
S10 = 1234567898
S11 = 12345678987

S17 = 12345678987654321
S18 = 123456789876543212

(对于Sn来说,长度为n,每个串从1开始,增长到9再降到1,再从1开始增长,不包含0)

现在我们把所有的字符串拼接起来,组成一个无限长的字符串

S = 1121231234…123456789876543212345678987…
你能找出该字符串的第n位数字是多少吗?

输入
一个整数(长度 < 20 位),表示所求的位数是多少位

输出
一个整数,表示该位上的数字是多少

输入样例
1
6
7

输出样例
1
3
1

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
	long long int n,t,i,s;
	long long int a[16]={2,1,2,3,4,5,6,7,8,9,8,7,6,5,4,3};
	cin>>n;
	t=sqrt(2*n);
	for(i=t;i>=0;i--)
	{
		if(i*(i+1)<2*n)
		{
			s=i;
			break;
		}
	}
	s=n-(s*(s+1))/2;
	cout<<a[s%16]<<endl;
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值