关于#c语言#的问题:高精度取余

img


您好可以帮我看看这个为什么提交一直有测试点过不去吗,AC不了,不知道是哪里有问题

你的m要设一个初始值,在int那里加上m=0

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7539389
  • 你也可以参考下这篇文章:关于C语言实现高精度乘法运算
  • 除此之外, 这篇博客: C语言既有高级语言又有低级语言的特点,但为什么它不是低级语言呢?中的 想象一个非 C 语言的处理器 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    针对 Spectre 和 Meltdown 漏洞的修复方案将显著降低性能,在很大程度上抵消了过去十年在微架构方面所取得的进步。或许,现在是时候停止尝试如何让 C 语言代码变得更快,而是想办法设计出能够在快速处理上运行的编程模型。

    我们有很多设计的例子,它们并没有专注于从传统的 C 语言代码中获得灵感。例如,高度多线程芯片(Sun/Oracle 的 UltraSPARC Tx 系列)不需要那么多的缓存来保持执行单元的满载。研究处理器已经将这个概念扩展到非常大量的硬件调度线程。这些设计背后的关键思想是,通过足够的高级并行度,我们可以将等待内存数据的线程挂起,并使用其他指令填充执行单元。这种设计的问题在于 C 语言程序往往没有繁忙的线程。

    ARM 的 SVE(标量向量扩展)为程序和硬件之间的接口提供了另一个视角。常规向量单元提供固定大小的向量操作,并让编译器尝试将算法映射到可用的单元大小。相反,SVE 接口会让程序员描述可用的并行度,并依赖硬件将其映射到可用的执行单元数。要在 C 语言中使用这个相当复杂,因为自动向量器必须在循环结构体中推断出可用的并行度。通过函数式的映射操作为它生成代码非常简单:映射数组的长度就是可用的并行度。

    看到这里,你是不是对“C语言”又有了一点新的认知呢~如果你喜欢这篇文章的话,动动小指,加个关注哦~

     

    最后,如果你也想成为程序员,想要快速掌握编程,这里为你分享一个学习企鹅圈子!

    里面有资深专业软件开发工程师,在线解答你的所有疑惑~编程语言入门“so easy”

    资料包含:编程入门、游戏编程、课程设计、黑客等。

    编程学习书籍:

    编程学习视频:

  • 您还可以看一下 贺利坚老师的C语言及程序设计提高视频精讲课程中的 函数的声明、定义和调用小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    求一个数的k次方,递推可以实现,一次乘一次乘,当然可以先求出k-1次方,然后乘以自己,递归求解,设定初值,如果是1乘以自己返回1,否则返回n*fac(n, k-1)。

    include

    int fac(int n, int k) { if (k == 1) return n; return n* fac(n, k-1); } int main() { int n = 0; int k = 0; scanf("%d %d", &n, &k); int ret = fac(n, k); printf("%d", ret); return 0; }


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^