Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 5916 Accepted Submission(s): 4135
2 3 12 7 152455856554521 3250
2 5 1521
乍一看还以为是大数相减,通过不断相减得到小于n的值,即余数。准备敲时,感觉会超时,放弃了。
正解则是使用同余定理不断对s取模。
这一题用了以下两个同余定理公式:
(A + B) mod M = ( A mod M + B mod M ) mod M
(A * B) mod M = ((A mod M) *( B mod M)) mod M
代码如下:
#include<cstdio> #include<cstring> int main() { int n,len,i,ans; char str[1010]; while(scanf("%s%d",str,&n)!=EOF) { len=strlen(str); ans=0; for(i=0;i<len;i++) { ans=ans*10+(str[i]-'0'); ans=ans%n; } printf("%d\n",ans); } return 0; }