分析:
给出一个长度最大为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;
}