大数取模 (模板)——HDU 5832

    xiaoxiao2025-07-24  4

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

    分析: 给出一个长度最大为10000000的数字,判断它模137和模73是否都余0。

    题解: 直接套用大数取模: 针对数字位数超过最大整数范围限制的数进行取模操作,每次对一位取模 根据 (ab)%mod=(a%mod)*(b%mod);把大数换为字符串处理,之后对每一位数字进行取模

    大数取模模板:

    while(scanf("%s", num) != EOF)//输入大数 { int len = strlen(num); long long ans = 0; for(int i = 0; i < len; ++i) { ans = ans*10 + (num[i]-'0'); ans %= MODZ; } } AC 代码: /************************************************************************* > File Name: 1001.cpp > Author: Akira > Mail: qaq.febr2.qaq@gmail.com > Created Time: 2016年08月14日 星期日 12时01分36秒 ************************************************************************/ #include <iostream> #include <cstdio> #include <cstring> #include <string> #include <cstdlib> #include <algorithm> #include <queue> #include <stack> #include <map> #include <cmath> #include <vector> #include <set> #include <list> typedef long long LL; typedef unsigned long long ULL; typedef long double LD; #define MST(a,b) memset(a,b,sizeof(a)) #define CLR(a) MST(a,0) #define Sqr(a) ((a)*(a)) using namespace std; #define MaxN 100000 #define MaxM MaxN*10 #define INF 1000000000 #define bug cout<<88888888<<endl; char str[11234567]; int main() { int mod = 73*137; int t = 1; while(~scanf("%s", str)) { int len = strlen(str); LL a= 0; for(int i=0;i<len;i++) { a = a*10 + (str[i]-'0'); a %= mod; } if(a ==0) { printf("Case #%d: YES\n", t++); } else { printf("Case #%d: NO\n", t++); } } return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-1301000.html
    最新回复(0)