hdu1212(大数取模)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1212

题意:给出两个数a, b,求a%b;

思路:(c+d)%e=c%e+d%e,(c*d)%e=(c%e*d%e)%e;

代码:

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <string.h>
 4 #define ll long long
 5 #define MAXN 1000+10
 6 using namespace std;
 7
 8 int main(void){
 9     ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
10     int b;
11     char a[MAXN];
12     while(~scanf("%s%d", a, &b)){
13         int ans=0, cnt=1;
14         for(int i=strlen(a)-1; i>=0; i--){
15             int gg=(a[i]-‘0‘)*cnt;
16             ans=(ans+gg)%b;
17             cnt=cnt*10%b;
18         }
19         printf("%d\n", ans);
20     }
21     return 0;
22 }

据说java大数很厉害。。然后get了一下。。果然威力无穷。。。

代码:

 1 import java.math.BigDecimal;
 2 import java.util.Scanner;
 3
 4 public class Main{
 5     public static void main(String args[]){
 6         Scanner scan = new Scanner(System.in);
 7         while(scan.hasNext()){
 8             BigDecimal a = scan.nextBigDecimal();
 9             int b = scan.nextInt();
10             System.out.println(a.remainder(new BigDecimal(b)));
11         }
12     }
13 }
时间: 2025-01-01 06:47:05

hdu1212(大数取模)的相关文章

快速幂+大数取模

快速幂+大数取模 快速幂,其实就是求(a^b)% p,(其中a,b,p都比较大在int范围内)这类问题. 首先要知道取余的公式:(a*b)%p=(a%p*b%p)%p. 那么幂不就是乘机的累积吗,由此给出代码: int fast(int a,int b,int p) {   long long a1=a,t=1; while(b>0) { if(b&1)          /如果幂b是奇数多乘一次,因为后边会除2变偶数,(7/2=3) t=(t%p)*(a1%p)%p; a1=(a1%p)*

csu 1556: Jerry&#39;s trouble(大数取模)

题意:求出1^m+2^m+...n^m 思路:直接套用模板 #include<cstdio> #include<iostream> #include<cstring> #include<cmath> #include<stdlib.h> #include<algorithm> #include<queue> #include<stack> #include<ctype.h> #define LL l

大数取模

//大数取模 #include "cmath" #include "iostream" #include "string.h" using namespace std; int mod(char str[],int num) { int number[100]; for(int i=0;i<strlen(str);i++) number[i]=str[i]-'0'; int remainder=0; for(int i=0;i<str

hdu2302(枚举,大数取模)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2303 题意:给出两个数k, l(4<= k <= 1e100, 2<=l<=1e6):其中k是两个素数的乘积,问k是否存在严格小于l的因子,若有,输出 BAD 该因子,反之输出GOOD: 思路: 先1e6内素数打表,再枚举一个因子,判断因子用大数取模: 代码: 1 #include <iostream> 2 #include <stdio.h> 3 #inclu

POJ 1426 Find The Multiple(大数取模)【DFS】||【BFS】

<题目链接> 题目大意: 给一个小于200的正整数n,问只有0和1组成的位数小于100的最小能被n整除的数是多少. 解题分析: 用DFS或者BFS沿着位数进行搜索,每一次搜索到下一位都有两种情况,0或者1,还要注意的是,大数取模的方法.但是我有一个疑问,这题位数最高为100,用dfs为什么不会超时?还是说只是此题数据太弱吗? BFS解法 #include<iostream> #include<cstdio> #include<queue> #include&

poj2635--The Embarrassed Cryptographer(数论篇1,大数取模)

The Embarrassed Cryptographer Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 12496   Accepted: 3330 Description The young and very promising cryptographer Odd Even has implemented the security module of a large system with thousands of

机试真题 大数取模运算

之前总结过,大数问题,取模就是取商取余数: #include<iostream> #include<stdlib.h> #include<string> using namespace std; string devide(int& r, string s, int n) { string ss = ""; for (int i = 0; i < s.size(); i++) { int temp = r*10 + int(s[i] -

UVA128 - Software CRC(大数取模)

题目链接 题目大意:给你一个字符串,这个字符串代表的是256进制的一个数,要求在这个字符串后面再加上两个两个字节,使得这个新的字符串的值取模于34943等于0.最后要求你输出这两个字节(十六进制). 解题思路:256进制的数先转化成十进制的数m,然后求出还需要的数n使得(n + m)%34943 ==0 ,最后再将n转换成16进制的数输出就可以了. 代码: #include <cstdio> #include <cstring> typedef long long ll; cons

【HDU 5832】A water problem(大数取模)

1千万长度的数对73和137取模.(两个数有点像,不要写错了) 效率要高的话,每15位取一次模,因为取模后可能有3位,因此用ll就最多15位取一次. 一位一位取模也可以,但是比较慢,取模运算是个耗时的运算. #include <cstdio> #define ll long long ll n,m; int p,cas; char s[10000005]; int main() { while(gets(s)){ n=m=p=0; while(s[p]){ for(int i=0;i<1