求数

 给你这么个数列
112123123412345123456123456712345678123456789123456789101234567891011...
看出规律了吗 这个数列是由下列数列串合而成:
1
12
123
1234
12345
123456
1234567
12345678
123456789
12345678910
1234567891011
12345678910...
...

现在问题是给定1 <=i <=2147483647
要求此数列的第i位

程序1 求中间值:

#include<iostream>
using namespace std;
int main()
{
 unsigned long i=2147483647;
 unsigned long k=0;
 unsigned long all=0;
 unsigned long las=1;
 for(;k<9&&all<=i;k++)
 {
  all+=las;
  las++;
 }
 for(;k<99&&all<=i;k++)
 {
  all+=las+1;
  las+=2;
 }
   for(;k<999&&all<=i;k++)
 {
  all+=las+2;
  las+=3;
 }
 for(;k<9999&&all<=i;k++)
 {
  all+=las+3;
  las+=3;
 }
 for(;k<99999&&all<=i;k++)
 {
  all+=las+4;
  las+=4;
 }
 cout<<k;
 cout<<all;
 cout<<las;
 return 0;
}

 

程序2 主程序 但是哈希表没写...太麻烦1--35009的连续数:

#include<iostream>
#include<vector>
using namespace std;
int main()
{
 typedef unsigned long ul;
 vector<short> ful_lis;//2 complex 2 initialize this hash table
 ul end;
 ul k;
 ul all;
 ul las;
 short add;
 cin>>end;
 if(end<45)
 {
  k=0;
  all=0;
  las=0;
  add=0;
 }
 else if(end<9045)
 {
  k=9;
  all=45;
  las=9;
  add=1;
 }
 else if(end<1395495)
 {
  k=99;
  all=9045;
  las=189;
  add=2;
 }
 else if(end<148918995)
 {
  k=999;
  all=1395495;
  las=2889;
  add=3;
 }
 else if(end<2147483647)
 {
  k=9999;
  all=148918995;
  las=29889;
  add=4;
 }
 for(;all<end;k++)
 {
  all+=las+add;
  las+=add;
 }
 cout<<ful_lis[end-all];
 return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值