大整数截取

题目来自于:https://www.acmcoder.com/#/practice/code

题目描述:

花花有一个很珍贵的数字串,但是它太长了,没有办法保留下来,所以她想截取其中一段保存下来,但是她希望截取下来的这一段数对1000000007取模之后等于Ai,她想知道有多少种截取方案。数字串S中截取一段是指S[L], S[L+1], …, S[R]连起来所形成的十进制数,其中L和R满足1≤L≤R≤|S|。例如S=“1023456789”,S(1,2)=10,S(2,4)=23,S(2,10)=23456789。

输入描述

第一行一个数字串,长度不超过30000。

第二行一个数T,表示询问的数量。(T≤100)

接下来T行,每行一个非负整数Ai,表示询问有多少种截取方案使得其值模1000000007后等于Ai。(0≤Ai<1000000007)

输出描述

共T行,每行一个非负整数,表示方案数。

样例输入

1000000008001
4
8
0
1
10

样例输出

9
39
5
2

分析

1、计算有多少种截取方案,进行截取
2、分别对1000000007进行取模,求出满足要求的元素
3、输出
var printOut = function(arr){
  let [str,...arrtemp]=arr;
  //计算截取方式的值
  let strarr = []
  for(i=0;i<str.length;i++){
    for(j=1;j<=str.length-i;j++){
      strarr.push(str.substr(i,j))
    }
  }
  //满足要求的元素,输出
  let result = []
  arrtemp.forEach(item=>{
    result = strarr.filter(itemson=>{
      return Number(itemson)%1000000007 === item
    })
    console.log('模后为 '+item+' 的有 '+result.length+' 个,分别为:'+result)
  })
}
printOut(['1000000008001',8,0,1,10]);

结果:

模后为 8 的有 9 个,分别为:000000008,00000008,0000008,000008,00008,0008,008,08,8
模后为 0 的有 39 个,分别为: 0,00,000,0000,00000,000000,0000000,00000000,0,00,000,0000,00000,000000,0000000,0,00,000,0000,00000,000000,0,00,000,0000,00000,0,00,000,0000,0,00,000,0,00,0,0,00,0
模后为 1 的有 5 个,分别为:1,1000000008,001,01,1
模后为 10 的有 2 个,分别为:10,10000000080
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值