我写了一个C程序,递归地计算数字的位数和.我的问题是,是否有任何其他方法,最好是更快,可以完成这一程序.

这是我的代码,也许我可以避开原型函数,但我不知道这是否会让它变得更快.

#include <stdio.h>

int sum(int);

int main() {
    int i;
    scanf("%d\n", &i);
    printf("%d", sum(i));
}

int sum(int x) {
    int res;
    if (x > 9) {
        res = (sum(x % 10) + sum(x / 10));
    } else {
        res = x;
    }
    return res;
}

推荐答案

正如注释中所提到的,为此使用递归是没有意义的.下面是一个非常简单的迭代版本,它应该更快:

int sum(int x) {
    int res = 0;
    while (x) {
        res += x % 10;
        x /= 10;
    }
    return res;
}

请注意,这假设x为非负数.

C++相关问答推荐

如何将一个enum类型类型转换为另一个类型?

有效地计算由一组点构成的等边三角形和等腰三角形的数量

intellisense不工作,甚至已经下载了c/c++扩展

C:scanf(%d&q;,...)输入只有一个减号

SDL 2.0-从数组渲染纹理

fwrite无法写入满(非常大)缓冲区

N的值设置为0或1(未定义的行为),而我正在try 学习realloc和Malloc的用法

实现简单字典时C语言中的段错误

Square不与Raylib一起移动

S的这种管道实施有什么问题吗?

在txt文件中找到指定的字符串,并从数字中减go 相同的值

如何在VS 2022中正确安装额外的C头文件

获取前2个连续1比特的索引的有效方法

覆盖读取函数,但当文件描述符为3或4时,我有问题

GetText不适用于包含国际字符的帐户名称

为什么二进制文件的大小不会随着静态数据的大小而增加?

Fscanf打印除退出C代码为1的程序外的所有内容

计算时出现奇怪的计算错误;N Select K;在C中

C/C++编译器可以在编译过程中通过按引用传递来优化按值传递吗?

变量的指针右对齐,函数的指针左对齐