关闭

CSDN 厦门大学线下编程比赛第一题:求和(同余定理)

标签: CSDN同余定理
2518人阅读 评论(7) 收藏 举报

题目意思:

给定a和n,计算a+aa+aaa+aaaa+...+a...a(n个a) 的和。 输入描述:测试数据有多组,以文件结尾。每行输入a,n(1<=a,n<=1000000)。输出描述:由于结果可能比较大,所以请输出答案mod 1000000007。

http://student.csdn.net/mcs/programming_challenges

题目分析:

同余定理:

s=0;

abc&MOD=((a*10%MOD+b%MOD)*10%MOD+c%MOD)%MOD:   

//迭代形式

s=(s*10%MOD+a%MOD)%MOD

s=(s*10%MOD+b%MOD)%MOD

s=(s*10%MOD+c%MOD)%MOD

abc%MOD=s:

此题需要注意的是,链接的a可能不是一位数,一次需要将a写入字符串(同余)进行操作,见代码注释。

AC代码:

<span style="font-size:18px;">/**
 *同于定理,需要注意每一次链接的a不一定是一位数
 *例如输入100 3
 *1、s=0; s1[3]="100";(a写入字符串)
 *2、s=(s*10%MOD+(s1[j]-'0'))%MOD;
 *3、下一次链接下一个数,只需要用s继续链接a即可
 *4、每一次用sum+=s;
 */
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#define MOD 1000000007
using namespace std;
int main()
{
    int a,n;
    while(cin>>a>>n){
        char s1[10];
        sprintf(s1,"%d",a);//将a写入字符串以便于进行逐个取余,(用同余定理)
        int len=strlen(s1);
        long long sum=0,s=0;
        for(int i=0;i<n;i++){
            for(int j=0;j<strlen(s1);j++){//每次将数字a分成为每一位取余与上一个数链接
                s=(s*10%MOD+(s1[j]-'0'))%MOD;
            }
            sum=(sum%MOD+s%MOD)%MOD;
            //printf("%s\n",s2);
        }
        cout<<sum<<endl;
    }
    return 0;
}
</span>



2
0
查看评论

(同余定理)厦门大学线下编程比赛第一题:求和

转自:http://blog.csdn.net/fool_ran/article/details/41127633 题目意思: 给定a和n,计算a+aa+aaa+aaaa+...+a...a(n个a) 的和。 输入描述:测试数据有多组,以文件结尾。每行输入a,n(1。输出描述:由于结果可能...
  • better_life30
  • better_life30
  • 2015-03-12 09:08
  • 344

厦门大学线下编程比赛第一题:求和

题目详情 给定a和n,计算a+aa+aaa+aaaa+...+a...a(n个a) 的和。 输入描述: 测试数据有多组,以文件结尾。每行输入a,n(1 输出描述: 由于结果可能比较大,所以请输出答案mod 1000000007。 答题说...
  • xiaobei1a2b3c
  • xiaobei1a2b3c
  • 2014-11-14 20:31
  • 1540

CSDN 四川大学线下比赛第一题

#include #include using namespace std; #define MAX_N 40 int a[MAX_N][MAX_N]; int main(){         int n; &#...
  • u013008291
  • u013008291
  • 2014-09-30 22:54
  • 409

CSDN 四川大学线下编程比赛第一题:数字填充

四川大学线下编程比赛第一题:数字填充 发布公司: 有 效 期: CSDN 2014-09-27至2015-09-26 难 度 等 级: 答 题 时 长: 编程语言要求: 12...
  • u011699990
  • u011699990
  • 2014-10-14 22:46
  • 923

四川大学线下编程比赛第一题:数字填充 (java实现)

package com.act262.test; import java.util.Scanner; public class P { public static void main(String[] args) { test1(); } private static void ...
  • act262
  • act262
  • 2014-11-18 12:44
  • 582

四川大学线下编程比赛第一题:数字填充

题目详情 Peter是个小男孩,他总是背不清26个英文字母。于是,刁钻的英语老师给他布置了一个非常奇怪的作业,老师给了他一个由26个英文字母构成的N*N 的矩阵(我们保证N一定是一个奇数),问他这个矩阵构成的图案是否是一个标准的“X”。 一个标准的X的定义:1、对角线上所有元素都是同...
  • xiaobei1a2b3c
  • xiaobei1a2b3c
  • 2014-10-03 20:29
  • 899

C++ prime plus 第六版 8.8-4

//本程序参考http://blog.csdn.net/qq844352155/article/details/23362951并加以适当的修改,感谢原作者 #include #include using namespace std;struct stringy{ char * str; in...
  • liyabin19900829
  • liyabin19900829
  • 2014-12-12 20:59
  • 321

leetcode部分题目(C++)

2016.3.19 88. Merge Sorted Array(从尾到头) MySubmissions Question TotalAccepted: 92780 Total Submissions: 310153 Difficulty: ...
  • yuxin6866
  • yuxin6866
  • 2016-07-30 23:01
  • 322

《C++ Primer Plus》——编程练习答案(6)

第七章 7.13.1#include <iostream>double Average(int x, int y); int main() { using namespace std; int temp1=1, temp2=1; while (temp1!=0&...
  • Avalon_Y
  • Avalon_Y
  • 2016-03-20 12:41
  • 758

欧拉项目【ProjectEuler】系列-第一题

欧拉项目【ProjectEuler】系列-第一题 ----人既无名 既然是第一次,当然要写个基本的介绍咯。 欧拉项目是一系列挑战数学/计算机编程的问题. 需要的不仅仅是数学见解,还要利用计算机编程技巧,需要解决大多数问题,当然,数学帮助你运用优雅而有效的方法,实现漂亮而快速的代码。 欧拉...
  • qq910894904
  • qq910894904
  • 2012-02-13 20:44
  • 3749
    自我提醒
    个人资料
    • 访问:214765次
    • 积分:4566
    • 等级:
    • 排名:第7679名
    • 原创:243篇
    • 转载:13篇
    • 译文:1篇
    • 评论:54条
    博客专栏
    最新评论