编程100%22-12 基本算法之 大整数截取

Posted YoungerChina

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编程100%22-12 基本算法之 大整数截取相关的知识,希望对你有一定的参考价值。

题目描述

时间限制: 1000MS
内存限制: 65536KB

题目描述:

花花有一个很珍贵的数字串,但是它太长了,没有办法保留下来,所以她想截取其中一段保存下来,但是她希望截取下来的这一段数对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.(a + b)%c =((a%c)+(b%c))%c
2. (a * b)%c =((a%c)*(b%c))%c
3.(a – b)%c =((a%c)–(b%c))%c

实现

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_LEN    30000
const unsigned int MOD = 1000000007;

int getCountOfMod(char *str, int key)

    unsigned int i =0, j = 0;
    int count = 0;

    //printf("str=%s,ai=%d:", str, key);
    for(i = 0; i < strlen(str); i++)
    
        long remain = str[i] - '0';    //AC 64% 
        // unsigned int remain = str[i] - '0'; //AC 55% 
        if (remain == key)
            count++;
        
        for(j = i + 1; j < strlen(str); j++)
        
            remain = ((remain * 10) % MOD + (str[j] - '0')) % MOD;
            if (remain == key)
                count++;
         
    
    return count;



int main()

    int T = 0, Ai = 0;
    char *str = (char *)malloc((MAX_LEN + 2) * sizeof(char));

    scanf("%s", str);
    //printf("%s\\n", str);
    scanf("%d", &T);
    //printf("%d\\n", T);
    for (int i = 0; i < T; i++) 
        scanf("%d", &Ai);
        printf("%d\\n", getCountOfMod(str, Ai));
        //printf("%d\\n", Ai);
    
 
    free(str);
    return 0;

通过率仅有64%;欢迎各位大咖指导

----------------------------------------------------------------------------------------

以上是关于编程100%22-12 基本算法之 大整数截取的主要内容,如果未能解决你的问题,请参考以下文章

算法笔记_125:算法集训之编程大题集一(Java)

Python编程之算法练习_002

数据结构与算法之深入解析“我能赢吗”的求解思路与算法示例

算法训练 Torry的困惑(基本型)

数据结构与算法之深入解析“下一个更大元素III”的求解思路与算法示例

数学建模 割平面算法求解整数规划基本原理与编程实现