c语言怎么对大数求余,C语言:大数取余

大数取余数(数组)

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

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

48dd324a061d2780fbdfe6235851ba57.png

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

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

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

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

a8429bf81aac7639ef75eaef80ec9515.png

完整代码如下:

1 #include

2 #include

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

13 {

14 b[i]=a[i]-'0';

15 }

16 for(i=0;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 }

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值