大树求余原理和算法

(a * b) % c = ((a % c) * (b % c)) % c
(a + b) % c = ((a % c) + (b % c)) % c
10000位大的数字可以分开算:
比如:
m=123
123 = (1*10 + 2)*10 + 3
m%n = 123%n = (((1%n * 10%n + 2%n)%n * 10%n) % n + 3%n)%n

#include<stdio.h>
#include<string.h>
int main()
{
 char s[1000];
 long a[1000],i,t,m,n,r;
 while(scanf("%s%ld",s,&n)>0)
 {
  m=strlen(s);
  for(i=0;i<m;i++)
   a[i]=s[i]-48;
  r=0;
  for(i=0;i<m;i++)
  {
   t=r*10+a[i];
   a[i]=t/n;
   r=t%n;
  }
  printf("%ld\n",r);
 }
 return 0;
}

posted @ 2012-11-23 13:14  紫忆  阅读(336)  评论(0编辑  收藏  举报