如何改进仅使用libc的write函数的代码

  • 本文关键字:write 函数 代码 libc 何改进 c
  • 更新时间 :
  • 英文 :


我必须编写一个函数,它接受一个int数作为参数并将其打印到终端,但是有一个问题:我只能使用从glibc写入的函数。我是一个初学者,我怎样才能在不变得复杂的情况下改进这段代码?顺便说一句,标题太长了,因为我不能用更短的标题来发布。

#include <stdio.h>
void ft_putchar(char c)
{
write(1, &c, 1);
}
int power(int num, int exp)
{
int n = num;
int i = 0;
for (i = 0; i < exp-1; ++i)
{
n = n*num;
}
if (exp == 0)
return 1;
return n;
}
void ft_putnbr(int nb)
{
int n = nb;
int i = 0;
while (n != 0)
{
++i;
n = n/10;
}
for (i = i-1; i >= 0; --i)
{
ft_putchar((nb/power(10, i))%10 + '0');
}


}
main()
{
ft_putnbr(1234);
}

第一个需要改进的候选函数是power()

  1. 如果exp参数为0,你的函数应该立即返回1,没有不必要的计算,循环等。可以通过将if指令移到函数的开头来实现。或者,您可以使用1作为n的起始值并扩展循环来消除这种检查,如下所示:
int power(int num, int exp)
{
int n = 1;
for (int i = 0; i < exp; ++i)
{
n = n * num;
}
return n;
}
  1. 下一件事是,您只使用10的功率,所以通过参数传递它是不必要的。只需将函数重命名为power10()并仅传递指数:
int power10(int exp)
{
int n = 1;
int i = 0;
for (i = 0; i < exp; ++i)
{
n = n * 10;
}
return n;
}
void ft_putnbr(int nb)
{
....
for (i = i - 1; i >= 0; --i)
{
ft_putchar((nb / power10(i)) % 10 + '0');
}
}
  • ,或者如果你想要更多的"generic"power()函数,您应该添加检查0的数字(在这种情况下,0的值应该返回,而不管指数),并为负指数(0的值也应该返回):
  • int power(int num, int exp)
    {
    if ((num == 0) || (exp < 0))
    return 0;
    int n = 1;
    for (int i = 0; i < exp; ++i)
    {
    n = n * num;
    }
    return n;
    }
    
    1. 最后,如果您想加快代码的速度,您应该重新考虑将计算10的功率的调用替换为简单的静态功率数组,如下所示:
    static int power10[] = {1, 10, 100, 1000, 10000, 100000, 1000000,
    10000000, 100000000, 1000000000};
    ....
    void ft_putnbr(int nb)
    {
    ....
    for (i = i - 1; i >= 0; --i)
    {
    ft_putchar((nb / power10[i]) % 10 + '0');
    }
    }
    

    相关内容

    • 没有找到相关文章

    最新更新