【HDU】 1212 Big Number

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

起先一看,哦,是大数;接着再看,取模问题,而且:B will be smaller than 100000。

引起我思考最主要的原因是用大数写取模的问题我还真不太会,然后就找到了一个很有用的定理:同余定理。

百度百科的版本:

      1)a≡a(mod d)

  2)a≡b(mod d)→b≡a(mod d)

  3)(a≡b(mod d),b≡c(mod d))→a≡c(mod d)

 

  如果a≡x(mod d),b≡m(mod d),则

  4)a+b≡x+m (mod d) 

  5)a-b≡x-m (mod d)

  6)a*b≡x*m (mod d )

 

博客空间整理:

       (a+b)%c=(a%c+b%c)%c;

       (a*b)%c=(a%c*b%c)%c;

 

显然一看到人家整理好的公式,这个题目就迎刃而解了,也就不用大数那么麻烦了。

 

Main Code
 1 int main()
 2 {
 3     int i, j, len, m, ans;
 4     char str[1010];
 5     while(scanf("%s %d",str,&m)!=EOF){
 6            len = strlen(str);
 7            ans = 0;
 8            for(i=0; i<len; ++i){
 9                  ans = (ans*10%m + (str[i]-'0'))%m;
10            }
11            printf("%d\n",ans);
12     }
13     return 0;
14 }
posted on 2012-08-04 17:54  Yuna_  阅读(71)  评论(0)    收藏  举报