1086: 大数取模

 

题目描述

现给你两个正整数A和B,请你计算A mod B。
为了使问题简单,保证B小于100000。

输入

输入包含多组测试数据。每行输入包含两个正整数A和B。A的长度不超过1000,并且0<B<100000。

输出

对于每一个测试样例,输出A mod B。

样例输入

2 3
12 7
152455856554521 3250

样例输出

2
5
1521

【概念】

  (a+b)%n =(a%n+b%n)%n

  (a-b)%n = (a%n-b%n)%n

  实话说刚开始我没看懂。

  代码:

  1. int mod(char str[],int num)
  2. {
  3. int number[MAXN],i,d = ;
  4. int len = strlen(str);
  5. //将字符串数组转化为数字数组
  6. for(i = ;i < len;i++)
  7. number[i]=str[i]-'';
  8. int remainder=;
  9. for(i = ;i < len;i++)
  10. {
  11. remainder=(remainder * + number[i]) % num;
  12. }
  13. return remainder;
  14. }

  举个例子:

    123 % 4 = 3

    -1-  (0 * 10 + 1) % 4 = 1;  -2-  (1 * 10 + 2) % 4 = 0;

    -3-  (0 * 10 + 3) % 4 = 3;  -4-  得到最终结果3

    也就是模拟了除法竖式的过程

【练习题】

  • 题目链接:http://arena.acmclub.com/problem.php?id=1086

    代码:

  1. #include<cstdio>
  2. #include<cstring>
  3. const int MAXN = ;
  4. int mod(char str[],int num)
  5. {
  6. int number[MAXN],i,d = ;
  7. int len = strlen(str);
  8. //将字符串数组转化为数字数组
  9. for(i = ;i < len;i++)
  10. number[i]=str[i]-'';
  11. int remainder=;
  12. for(i = ;i < len;i++)
  13. {
  14. remainder=(remainder * + number[i]) % num;
  15. }
  16. return remainder;
  17. }
  18. int main(){
  19. char A[MAXN];
  20. int B;
  21. //'~'取反符号,当输入值不符合要求时停止
  22. //while(~scanf("%s %d",A,&B)){
  23.  
  24. //判断有无结尾符结束
  25. //while(scanf("%s %d",A,&B) != EOF){
  26.  
  27. //如果两个参数均被读入则返回参数个数
  28. while(scanf("%s %d",A,&B) == ){
  29. printf("%d\n",mod(A,B));
  30. }
  31. return ;
  32. }

  

  • 下面这种方法是运用到了C++ 的大数类,大数模板
    C++ 大数模板 链接:http://www.cnblogs.com/zhengbin/p/4368182.html

    代码:

  1. #include<iostream>
  2. #include<cstring>
  3. using namespace std;
  4. const int MAXN = ;
  5. const int DLEN = ;
  6. char str[];
  7. int modd;
  8. class BigNum{
  9. private:
  10. int a[];
  11. int len;
  12. public:
  13. BigNum(){len = ;memset(a,,sizeof(a));}
  14. BigNum(const char*);
  15. int operator %(const int &)const;
  16. };
  17. BigNum::BigNum(const char*s) //将一个字符串类型的变量转化为大数
  18. {
  19. int t,k,index,l,i;
  20. memset(a,,sizeof(a));
  21. l=strlen(s);
  22. len=l/DLEN;
  23. if(l%DLEN)
  24. len++;
  25. index=;
  26. for(i=l-;i>=;i-=DLEN)
  27. {
  28. t=;
  29. k=i-DLEN+;
  30. if(k<)
  31. k=;
  32. for(int j=k;j<=i;j++)
  33. t=t*+s[j]-'';
  34. a[index++]=t;
  35. }
  36. }
  37. int BigNum::operator %(const int & b) const{ //大数对一个int类型的变量进行取模运算
  38. int i,d=;
  39. for (i = len-; i>=; i--)
  40. {
  41. d = ((d * (MAXN+))% b + a[i])% b;
  42. }
  43. return d;
  44. }
  45. int main(){
  46. while(~scanf("%s %d",str,&modd)){
  47. BigNum big(str);
  48. cout << big % modd << endl;
  49. }
  50. return ;
  51. }

【大数取模】HDOJ-1134、CODEUP-1086的更多相关文章

  1. hdu2302(枚举,大数取模)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2303 题意:给出两个数k, l(4<= k <= 1e100, 2<=l<=1 ...

  2. (POJ2635)The Embarrassed Cryptographer(大数取模)

    The Embarrassed Cryptographer Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 13041 Accep ...

  3. HDU4704Sum 费马小定理+大数取模

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4704 题目大意: 看似复杂,其实就是求整数n的划分数,4=1+1+2和4=1+2+1是不同的.因而可 ...

  4. HDU--1212大数取模

    大数取模问题.题目传送门:HDU1212 #include <iostream> using namespace std; char a[1010]; int main() { int b ...

  5. ACM-ICPC 2018 焦作赛区网络预赛G Give Candies(隔板定理 + 小费马定理 + 大数取模,组合数求和)题解

    题意:给你n个东西,叫你把n分成任意段,这样的分法有几种(例如3:1 1 1,1 2,2 1,3 :所以3共有4种),n最多有1e5位,答案取模p = 1e9+7 思路:就是往n个东西中间插任意个板子 ...

  6. HPU 1471:又是斐波那契数列??(大数取模)

    1471: 又是斐波那契数列?? 时间限制: 1 Sec 内存限制: 128 MB 提交: 278 解决: 27 统计 题目描述 大家都知道斐波那契数列吧?斐波那契数列的定义是这样的: f0 = 0; ...

  7. 题解报告:hdu 1212 Big Number(大数取模+同余定理)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1212 Problem Description As we know, Big Number is al ...

  8. HDU-2303 The Embarrassed Cryptographer 高精度算法(大数取模)

    题目链接:https://cn.vjudge.net/problem/HDU-2303 题意 给一个大数K,和一个整数L,其中K是两个素数的乘积 问K的是否存在小于L的素数因子 思路 枚举素数,大数取 ...

  9. HDU-1226-超级密码-队列+广搜+大数取模

    Ignatius花了一个星期的时间终于找到了传说中的宝藏,宝藏被放在一个房间里,房间的门用密码锁起来了,在门旁边的墙上有一些关于密码的提示信息: 密码是一个C进制的数,并且只能由给定的M个数字构成,同 ...

随机推荐

  1. linux 下 apache启动、停止、重启命令

    基本的操作方法: 本文假设你的apahce安装目录为/usr/local/apache2,这些方法适合任何情况 apahce启动命令: 推荐/usr/local/apache2/bin/apachec ...

  2. Web Server 和 HTTP 协议

    https://toutiao.io/posts/xm2fr/preview 一直在找实习,有点什么东西直接就在evernote里面记了,也没时间来更新到这里.找实习真是个蛋疼的事,一直找的是困难模式 ...

  3. 【设计模式六大原则2】里氏替换原则(Liskov Substitution Principle)

      肯定有不少人跟我刚看到这项原则的时候一样,对这个原则的名字充满疑惑.其实原因就是这项原则最早是在1988年,由麻省理工学院的一位姓里的女士(Barbara Liskov)提出来的. 定义1:如果对 ...

  4. POJ1276Cash Machine

    http://poj.org/problem?id=1276 题意 : 给你一个目标钱数,再给你钱币的种数和钱币的面值,让你用这些钱凑出不大于目标钱数的钱然后输出这个最接近且不大于目标钱数的钱. 思路 ...

  5. hdu 4447 Yuanfang, What Do You Think?

    思路: 这题有个结论也可以自己归纳: 对于给定的n,其约数用pi表示 T(n)=T(p1)T(p2)……T(pn)T(n') 其中T(n')是这个式子所独有的也就是 T(n')=(x^n-1)/T(p ...

  6. VBS生成随机数

    自动化工作中常常遇到因数据重复使业务无法提交的问题,我想到了利用随机数来解决这个问题,下面对VBS生成随机数做下解析: 一.Randomize语句 Randomize :初始化随机数生成器. 语法 : ...

  7. Oracle - 位图索引的适用条件

    位图索引的适用条件 位图索引适合只有几个固定值的列,如性别.婚姻状况.行政区等等,而身份证号这种类型不适合用位图索引. 位图索引适合静态数据,而不适合索引频繁更新的列. 举个例子,有这样一个字段bus ...

  8. Python图片转换成矩阵,矩阵数据转换成图片

    # coding=gbk from PIL import Image import numpy as np # import scipy def loadImage(): # 读取图片 im = Im ...

  9. C++:类的成员函数定义方式

    1.成员函数的第一种定义方式:在类声明中只给出成员函数的原型,而将成员函数的定义 放在类的外部. 返回值类型 类名::成员函数名(参数表) {      函数体  } class Point{ pub ...

  10. JodaTime初体验

    前段时间用JDK自带的Calendar类来处理日期,需要获取年.季,月,星期的起始日期,被折腾得要死要活.看了这篇文章 http://www.blogbus.com/dreamhead-logs/22 ...