我知道你可以使用模数和除法得到数字的数字.以下是我过去的做法:( Psuedocode以便让学生阅读本文为他们的家庭作业做一些工作):
int pointer getDigits(int number)
initialize int pointer to array of some size
initialize int i to zero
while number is greater than zero
store result of number mod 10 in array at index i
divide number by 10 and store result in number
increment i
return int pointer
Run Code Online (Sandbox Code Playgroud)
无论如何,我想知道是否有更好,更有效的方法来完成这项任务?如果没有,是否有任何替代方法可以完成此任务,避免使用字符串?C风格还是其他?
谢谢.我问,因为我想要在我的个人项目中做这件事,我想尽可能高效地做到这一点.
非常感谢任何帮助和/或见解.
与动态分配数组所需的时间相比,提取数字所需的时间将相形见绌。考虑在结构中返回结果:
struct extracted_digits
{
int number_of_digits;
char digits[12];
};
Run Code Online (Sandbox Code Playgroud)
您需要为最大位数选择一个合适的值(12此处对于 32 位整数来说就足够了)。或者,您可以返回 astd::array<char, 12>并使用无效值对终端进行编码(因此,在最后一个值之后,存储 a10或其他非数字的内容)。
根据是否要处理负值,您还必须决定如何报告一元减号 ( -)。