HDU 1212 大整数的取模运算

因为这里是MOD最大为100000

所以我将字符串看作5个一组,并记录后面跟了多少个100000

每次取5个数根据其数据进行取模更新

注意过程中 100000*100000会超int

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
#define ll long long
int b;
char s[1005];

int main()
{
  //  freopen("a.in" , "r" , stdin);
    while(~scanf("%s%d" , s , &b))
    {
        int len = strlen(s);
        int p = len-1 , t = 0; //t表示后面要乘几次100000
        int cur = 0 ;
        while(p >= 0){
            ll num = 0 , mul = 1 ;
            for(int i = 0 ; i<5&&p>=0 ; i++){
                num += mul * (s[p] - ‘0‘);
                mul *= 10;
                p--;
            }
          //  cout<<"num: "<<num<<endl;
            num = num % b;
            for(int i = 1 ; i<=t ; i++){
                num *= 100000;
                num %= b;
            }
            num += cur;
            num %= b;
            cur = num;
            t++;
        }
        printf("%d\n" , cur);
    }
    return 0;
}
时间: 2024-07-30 13:43:28

HDU 1212 大整数的取模运算的相关文章

hdu 1212 Big Number(大数取模)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1212 Big Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 7083    Accepted Submission(s): 4884 Problem Description As we know, Big Number is

大整数取模运算出现运算结果负数的解决方案

首先我们看个例子 <?php echo 12121212121 % 1000000; //结果为 -689767 //实际应该为12121 ?> 这里的取模运算(取余数)出现了BUG.那么需要声明一下,负数也是可以取模操作的,并不是出现负数就是不对的我们应该把这种长整数类型看成float型数据进行处理介绍一个函数float fmod ( float $x , float $y )返回除法的浮点数余数通过这个函数的运算,就可以得到原本想要的余数结果 <?php $a = floatval(

poj 3980 取模运算

取模运算 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10931   Accepted: 6618 Description 编写一个C函数mod(int n, int m),实现取模运算% Input 输入包含多行数据 每行数据是两个整数a, b (1 <= a, b <= 32767) 数据以EOF结束 Output 于输入的每一行输出a%b Sample Input 5 3 100 2 Sample Output

[转]取模运算和求余运算的区别

[转]取模运算和求余运算的区别 通常情况下取模运算(mod)和求余(rem)运算被混为一谈,因为在大多数的编程语言里,都用'%'符号表示取模或者求余运算.在这里要提醒大家要十分注意当前环境下'%'运算符的具体意义,因为在有负数存在的情况下,两者的结果是不一样的. 对于整型数a,b来说,取模运算或者求余运算的方法都是: 1.求 整数商: c = a/b; 2.计算模或者余数: r = a - c*b. 通常常用的是正数之间取模或求余.下面的可以先不关心. —————————————————————

分数的乘法逆元和负数的取模运算

1.乘法逆元 A.定义 如果ax≡1 (mod p),且gcd(a,p)=1(a与p互质),则称a关于模p的乘法逆元为x. 既然有ax≡1 (mod p),那么有ax - py = 1,x是a关于模p的乘法逆元. B.分数的乘法逆元 对于实数域,一个数的乘法逆元就是其倒数,所谓乘法逆元就是相乘等于单位元的那个数. 对于ecc算法的离散曲线域,m的乘法逆元为n,满足m * n = 1 (mod p),即满足m*n mod p = 1 mod p,称作n就是m关于的p乘法逆元.在离散曲线域中,单位元

a ^ b mod c 取模运算优化反思(老物)

这是一篇嘲讽我之前的自己采用笨重愚蠢思想去解决问题的日志. RSA 加密与解密涉及到 a ^ b mod c 的问题,如何计算这个值呢? 我会选择 pow(a, b) % c, 事实上在写RSA的时候确实是这么干的,但现在看来真心愚蠢, 因为我为此不得不去实现了一个自己的大数四则运算库,也就是以数组为数(BigNum),而对于mod运算只需要换算为 A % B = A - ( A / B ) * B , 好吧,我自认为轮子准备充分了, 很快就写完了,也觉得很满意,也没什么不合适的地方,但现在开始

数论 - 取模运算及其性质

在算法竞赛中经常会用到各式各样的取模运算,下面将常用的总结下来以便自己复习 什么是取模运算 在java和c/c++中 对于整型数a,b来说,取模运算: 1.求整数商: c = a/b; 2.计算模: a % b = a - c * b; 例子: 9 % 4 = 9 - (9 / 4) * 4 = 1 9 %-4 = 9 - (9 /-4) -4 = 1 -9 % 4 = -9 - (-9 / 4) 4 =-1 -9 %-4 = -9 - (-9 /-4) *-4 =-1 在python中 a %

Divide two numbers,两数相除求商,不能用乘法,除法,取模运算

问题描述:求商,不能用乘法,除法,取模运算. 算法思路:不能用除法,那只能用减法,但是用减法,超时.可以用位移运算,每次除数左移,相当于2倍. 1 public class DividTwoIntegers { 2 public int divide(int dividend, int divisor) 3 { 4 if(divisor == 0) return Integer.MAX_VALUE; 5 if(divisor == -1 && dividend == Integer.MIN

POJ 1152 An Easy Problem! (取模运算性质)

题目链接:POJ 1152 An Easy Problem! 题意:求一个N进制的数R,保证R能被(N-1)整除时最小的N. 第一反应是暴力.N的大小0到62.发现其中将N进制话成10进制时,数据会溢出.这里有个整除,即(N-1)取模为0. 例子:a1a2a3表示一个N进制的数R,化成10进制: (a1*N*N+a2*N+a3)%(N-1)==((a1*N*N)%(N-1)+(a2*N)%(N-1)+(a3)%(N-1))%(N-1)==(a1+a2+a3)%(N-1): 这样防止了数据的溢出.