问题:
一个特别大的数除以23求余数用C语言应该怎么算啊?比如23232323232323232323232323232323232323232323232323232323233除以23,怎么算余数?
数据类型在计算机的存储是有大小限制的,所以才出现了大数求余这种问题,相对应的,我们的钱存储在银行也不可能用数字来表示,毕竟整个中国人的钱,远远超过了最大的数据类型的大小。
计算计算机最大数据类型的值:
#include "stdio.h"int main()
{printf("0~%lu\n",(1UL << sizeof(unsigned long long int)*8) -1);return 0;
}
输出
0~18446744073709551615
我们所说的大数是数字大于最大存储的变量,一个unsigned long long int
存储最大的自然数是18446744073709551615
,如果自然数大于这个数,就会溢出了。
有事说事,这个题目涉及数学知识,但是我觉得学好数学也是学好计算机的基础。
—— 有个知乎的同学进行了论证
对于取模23,只需要
1.声明结果变量,假设它是ans
, 令ans = 0
作为起始条件。
2.取走最高位数字,假设它是t
,令 ans = ans +t
.
3.如果还有数字没有被取走,则令 ans = (10*ans )%23
,并返回第二步。
最终得到的 ans
就是答案
—— 代码如下
#include "stdio.h"int main()
{int c;int ans = 0;/*如果没有按下Ctrl+C 就一直在while循环里面判断*/while ((c = getchar()) != EOF) {if (c == '\n') {/*输出结果*/printf("%d\n", ans);ans = 0;} else {/*递归计算*/// c in '0'...'9'c -= '0';ans = ans +c;ans = (ans*10)%3;}}return 0;
}
程序输出结果
weiqifa@bsp-ubuntu1804:~/c/dashuqiuyu$ gcc 1.c && ./a.out
0
0
1
1
2
2
3
0
12312312312
0
3235
1
23
2
5
2
156151859198153151561561561561561
0
数学论证过程
https://www.zhihu.com/question/431163782/answer/1644964013
推荐阅读:
专辑|Linux文章汇总
专辑|程序人生
专辑|C语言
我的知识小密圈
关注公众号,后台回复「1024」获取学习资料网盘链接。
欢迎点赞,关注,转发,在看,您的每一次鼓励,我都将铭记于心~