题目大意就是给你个数要你求是不是73和137的倍数,稍微做个计算就是求给的这个数%10001等不等于0
一看题哇哈哈哈水题赶快切,结果没看见N可以有那么大,得用字符数组存。。。
然后一个一个处理太慢了,一次要处理就要处理好几位才划算嘛,处理多少位好呢,每次都是%10001,那么最大就是处理16-4=12位
代码
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
char s[10000005];
int main()
{
int cas=1;
int temp=137*73;
while(~scanf("%s",s))
{
long long ans=0;
int len=strlen(s);
if(len<=12) //小于12位直接处理干净
for(int i=0;i<len;i++)
ans=ans*10+s[i]-'0';
else
{
int l=len%12;
if(len)
{
for(int i=0;i<l;i++)
ans=ans*10+s[i]-'0';
}
for(int i=l;i<len;i+=12)
{
ans%=temp; 提前%防止爆掉
for(int j=i;j<i+12;j++)
ans=ans*10+s[j]-'0';
}
}
ans%=temp;
if(ans)
printf("Case #%d: NO\n",cas++);
else
printf("Case #%d: YES\n",cas++);
}
return 0;
}