问题:

一个特别大的数除以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

数学论证过程

大大大大数怎么求余?C语言_数学建模

大大大大数怎么求余?C语言_c语言_02