C语言:超大数取余数

大数取余数(数组)数组

今天作学校的oj时遇到一题,问题可见一下截图:spa

查遍各大论坛,都没有遇到合适的方法,普通方法不可用,要采用数组的形式。3d

 

 

 被除数超过long long类型,不能采用常规思路,不然会出现wrong answer。值得注意的一点,是不能用double等实数类型,只有整数类型的才能够求余数;code

所以能够考虑利用数组运算,能够先定义字符串数组char a[5000],下标多打一些没有关系,以防万一,到时候能够用scanf("%s",a)解决。blog

我的的思路是再定义一个整数数组int b[5000],先把a数组中的每一个字符数字转换成数字。接下去就是小学生作题目了:字符串

前一个数字先乘以10而后再加上后一个数,进行取余数,余数再乘以10加上后一个数,以此往复便可。string

 

 

 

 

 

 

 

 

 

 

 

 

完整代码以下:io

 1 #include <stdio.h>
 2 #include <string.h>
 3 int main()
 4 {
 5     char a[3000];
 6     int k,b[3000];
 7     while(scanf("%s%d",a,&k)!=EOF)
 8     {
 9         int l;
10         l=strlen(a);
11         int i;
12         for(i=0;i<l;i++)
13         {
14             b[i]=a[i]-'0';
15         }
16         for(i=0;i<l;i++)
17         {
18             b[i+1]=(b[i]*10+b[i+1])%k;
19         }
20         printf("%d\n",b[l-1]);
21     }
22     return 0;
23 }
相关文章
相关标签/搜索