这不是一个家庭作业问题。我能想到的是重复将数字除以10(直到数字小于10)并保持计数,但这样的事情是否有诀窍呢?
答案 0 :(得分:10)
是的,你几乎有数学方法可以在那里做到。
while (num >= 10)
digit = num MOD 10 // and save this into an array or whatever
num = num / 10
在此末尾,num
将包含最后一位数字。
这是一个Javascript实现:
function getDigits(num) {
var digits = [];
while (num >= 10) {
digits.unshift(num % 10);
num = Math.floor(num / 10);
}
digits.unshift(num);
return digits;
}
请注意,它仅适用于非负整数。
答案 1 :(得分:7)
为什么在已经有一种非常可靠的方法实现转换时呢? (因为它不是家庭作业)。
在伪C中:
char digits[10];
sprintf(digits, "%d", number);
现在你的数字char数组(字符串)应该由数字的每个数字组成。大多数其他脚本语言也包含sprintf函数。
如果您需要base 8或base 16或binary等,这将有效。只需使用不同的格式说明符。
答案 2 :(得分:4)
数学答案是修改10并将每个结果添加到列表中,然后反转列表的顺序。这是一个基本的C#算法,它将执行此操作:
List<byte> digits = new List<byte>();
while(number > 10)
{
digits.Add(number % 10);
number %= 10;
}
//add the last digit
digits.Add(number);
byte temp;
for(var i=0;i<digits.Count/2;i++)
{
temp = digits[i];
digits[i] = digits[digits.Count-(i+1)];
digits[digits.Count-(i+1)] = temp;
}
其他“技巧”通常涉及字符串转换。这是使用Linq的C#one-liner,它将提供与上面相同的结果:
var digits = number.ToString().Select(c=>byte.Parse(c)).ToList();
答案 3 :(得分:3)
使用您的方法的Python代码:
def digits(n):
ds = []
while n > 0:
ds.append(n % 10)
n /= 10
ds.reverse()
return ds
将转换用于字符串:
def digits(n):
return map(int, str(n))
答案 4 :(得分:1)
如果是Integer,您可以将字符串表示转换为字符数组,然后将其转换为字节数组(0-9)
答案 5 :(得分:1)
一个更有效的算法,如果您的输入数字可能很大,则除以10的幂,比如1000,并使用查找表:
s = ""; // or use a string builder appropriate to your language...
table = {"000", "001", ..., "999"};
tableInitial = {"unused", "1", "2", ..., "9", "10", ..., "999"};
while(n >= 1000) {
m = n%1000;
n /= 1000;
s = table[m] + s;
}
s = tableInitial[n] + s;
答案 6 :(得分:0)
可以使用
进一步优化给定的python解决方案zerostr = ord('0')
def digits(n):
return map(lambda x: ord(x)-zerostr, str(n))
实际上,int -> str
转换可能已完全优化,为了获得数值,使用数字字符串的内在字符值会更好,在每个编码(包括EBCDIC)中都会给出数字值通过int
减法而不是str
解析。
答案 7 :(得分:0)
以下是JavaScript中用于处理整数或字符串的可逆数组函数:
function reverse(array)
{
var left = null;
var right = null;
var length = array.length;
for (left = 0, right = length - 1; left < right; left += 1, right -= 1)
{
var temporary = array[left];
array[left] = array[right];
array[right] = temporary;
}
return array;
}
function toDigitsArrayFromInteger(integer, isReverse)
{
var digits = [];
if (integer > 0)
{
var floor = window.Math.floor;
while (integer > 0)
{
digits.push(floor(integer % 10));
integer = floor(integer / 10);
}
// Array is populated in reverse order. Un-reverse it to make it normal.
if (!isReverse)
{
digits = reverse(digits);
}
}
else if (integer < 0)
{
digits = toDigitsArrayFromInteger(-integer, isReverse);
}
else if (integer === 0)
{
digits.push(0);
}
return digits;
}
function toDigitsArrayFromString(string, isReverse)
{
var digits = [];
string += ""; // Coerce to string.
var i = null;
var length = string.length;
for (i = 0; i < length; i += 1)
{
var integer = parseInt(string.charAt(i), 10);
if (isFinite(integer))
{
digits.push(integer);
}
}
if (isReverse)
{
digits = reverse(digits);
}
return digits;
}
将数字作为数组后,您可以轻松地反转数组以从左侧或右侧开始获取数字。
字符串函数更通用,因为它可以在字符串中找到任何数字,而整数函数仅限于整数。
基准: http://jsperf.com/todigitsarray
这两个函数之间的基准测试表明,在Firefox 10和Chrome 12中,字符串函数比整数函数快30%到60%。在Opera 12中,整数函数稍微快了大约10%。
答案 8 :(得分:0)
不确定我是否理解你想要的......
以下是否适合你?它是用C#编写的......
public static List<int> ExtractDigit()
{
// Input example
int number = 12345;
// Convert Integer to string
string numberedString = number.ToString();
// Create a list of integers
var numList = new List<int>();
// Convert each character in string back to int and add to list.
foreach (char c in numberedString)
{
numList.Add(Convert.ToInt32(c.ToString()));
}
return numList;
}
我希望我有所帮助。
答案 9 :(得分:0)
以下计划也可以。
public class Main {
public static void main(String[] args) {
int i1 =123456;
String s =new StringBuilder(String.valueOf(i1)).toString();
char a[]=s.toCharArray();
for(char c : a) {
Integer i = Integer.parseInt(c+"");
System.out.println(i);
}
}
}
答案 10 :(得分:0)
JavaScript的:
function digits(num) {
return String(num).split('').map(v => +v);
}