【问题标题】:Converting a number to string with multiple arguments将数字转换为具有多个参数的字符串
【发布时间】:2014-06-02 09:50:26
【问题描述】:

我想将基数 n 的数字 x 转换为字符串并将其存储在 str 中。 str 的最大尺寸为 ma​​x。在这个程序中,我不想使用任何库函数。如果我达到数组的最大大小,该函数应该返回 false 并且数组内容应该是未定义的。

函数原型如下:

bool num2str(int x, char *str, unsigned n, unsigned max);

我将如何进行这项工作?我无法理解其背后的算法。

我还需要检查 n 的值,但我已经这样做了:

bool num2str(int x, char *str, unsigned n, unsigned max)
{
    assert(n >= 2 && n <= 36);
    return true;
}

但这就是我所能做的。请帮忙。

【问题讨论】:

  • 你在课堂上做什么?
  • 这个问题似乎是题外话,因为它是关于完成一个人的家庭作业。
  • 听起来像是功课。试着解释一下算法中不清楚的地方。
  • 这是测试题之一。我想更清楚地理解它。

标签: c type-conversion atoi


【解决方案1】:

让我们取一个以 10 为底的数字:123456。现在让我们使用数字和以 10 为底的反复应用模数和整数除法:

123456 mod 10 = 6
123456 div 10 = 12345

12345 mod 10 = 5
12345 div 10 = 1234

如您所见,模数除以基数提取最后一位,而整数除以基数将数字上的数字向右移动。你可以对任何基地做同样的事情。希望这个提示就足够了。

【讨论】:

  • @user3647430 在每个步骤中使用模数作为静态字符缓冲区的索引将非常方便,看起来像“0123456789ABCDE....XYZ”用于计算顺便说一句,您的输出字符,尽管您会发现必须对结果字符串进行最后一次更改才能以正确的顺序获取所有计算出的数字。
  • @WhozCraig 好吧,它必须被逆转吗?因为模数是从最后一位开始的?
  • @user3647430 我会说这是一个明显的可能性 =P 如果您从str[0] 开始存储它们,然后是str[1] 等...
  • 递归传递 x div n iff (x div n > 0),在将数字转换为 char 之前,让我们在堆栈展开时向前构建字符串。
猜你喜欢
  • 1970-01-01
  • 2019-07-12
  • 2015-08-20
  • 2016-08-16
  • 1970-01-01
  • 2020-06-06
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
相关资源
最近更新 更多