您的位置:首页 > 其它

hdu 3123 GCC——注意中间结果的大小__int64

2012-03-17 20:43 295 查看
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char s[110];
int cmp(int m)
{
int l=strlen(s),n;
if(l>6)
return 0;
n=atoi(s);
if(n>m)
return 0;
return 1;
}
int main()
{
int t,n,m;
scanf("%d",&t);
while(t--)
{
scanf("%s %d",s,&m);
int h=cmp(m);
if(h==1)
{
n=atoi(s);
__int64 i,jie=1,he=1;
for(i=1;i<=n;i++)
{
jie=jie*i%m;//之前没注意到jie、he可能比int大;i-1的jie可能大于十万,i也可能大于十万,其积可能大于百亿
he=(he+jie)%m;
}
printf("%I64d\n",he%m);
}
else
{
n=m-1;
__int64 i,jie=1,he=1;
for(i=1;i<=n;i++)
{
jie=jie*i%m;
he=(he+jie)%m;
}
printf("%I64d\n",he%m);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  gcc