这不是一个家庭作业问题。我所能想到的就是重复将数字除以10(直到数字少于10)并保持计数,但是这种排序有什么用?如何从数字中提取每个数字?
回答
如果它是一个整数,你可以将字符串表示转换成字符数组,并再转化字节数组(0-9)
我认为把它转换成一个字符串表示本质上会重复10次分隔。至少,这就是我将要做的事情。 – 2010-09-01 01:06:57
如果它在十六进制中,该怎么办? – munmunbb 2017-02-12 05:15:10
整数是一个整数,它以相同的方式存储在内存中,无论您是否看到它以十进制,十六进制,二进制或其他形式显示。你问如何提取十六进制*表示*中的单个字符?如果是这样,只需将十六进制表示形式作为字符串,然后取出该字符串中的字符。 – 2017-02-12 05:33: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;
}
请注意,它仅适用于非负整数。用你的方法
Python代码:
def digits(n):
ds = []
while n > 0:
ds.append(n % 10)
n /= 10
ds.reverse()
return ds
使用convertation串:
def digits(n):
return map(int, str(n))
为什么自己实现转换时,已经是一个非常可靠的方式做到这一点? (因为它不是家庭作业)。
在伪C:
char digits[10];
sprintf(digits, "%d", number);
你现在的数字字符数组(字符串)应包括数的每个数字的。大多数其他脚本语言也包含sprintf函数。
这将工作,如果你想要基地8或基地16或二进制等只使用不同的格式说明符。
数学答案是mod 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#的一行,将给予相同的结果上面:
var digits = number.ToString().Select(c=>byte.Parse(c)).ToList();
一个更高效的算法,如果你输入数字可能很大,是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;
modding对于任何数字N都是有效的log(n)操作。即使对于大数目,它也没有得到更高的效率。 – KeithS 2012-02-02 17:23:38
@KeithS:渐近地,二元分裂 - 只要你使用快速分割(FFT或甚至Karatsuba),减少数字mod 10^k的k值约为log_100 N(对于输入N)。实际上,减少mod最小功率的十倍小于匹配在一个单词中的最大整数的平方根与减少mod 10一样快,所以在64位机器上你可以获得大约9倍的加速比。一旦达到某个阈值,您就可以将这两种方法结合起来,从渐近方法转为实用方法。根据我的经验,它大约有1000位数字,但它有所不同。 – Charles 2012-02-02 17:56:34
给定蟒溶液可以进一步优化使用
zerostr = ord('0')
def digits(n):
return map(lambda x: ord(x)-zerostr, str(n))
事实上,其中int -> str
转换可能是完全优化的,要获得数值,使用数字串的内在字符值会更好,在每个编码(包括EBCDIC)中,都会使用int
减法而不是str
解析来提供数字值。
下面是处理整数或字符串在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和铬12,字符串函数比整数函数快30%至60%。在Opera 12中,整数函数略快10%左右。
不知道如果我理解你想要正确的...
将在下面为你工作?这是写在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;
}
我希望我是有帮助。
以下程序也可以。
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);
}
}
}
的JavaScript:
function digits(num) {
return String(num).split('').map(v => +v);
}
- 1. 从数字中提取个人数字。
- 2. 如何读取Java中每个数字的每个数字
- 3. 如何从一串数字中提取单个数字?
- 4. 如何从字符串中提取数字到一个数组
- 5. 如何从文本中提取数字?
- 6. 如何从字符串中提取多个数字C
- 7. 提取数字从一个字符串
- 8. 从PostRequest中提取数字
- 9. 从GUID中提取数字
- 10. 使用grep,我如何从一个文本块中提取每个数字?
- 11. 将整数的每个数字提取到数组中?
- 12. 从字符串中提取数字
- 13. 从字符串中提取数字
- 14. Oracle:从字符串中提取数字
- 15. Rapidminer从字符串中提取数字
- 16. 从字符串中提取数字javascript
- 17. 如何从字符串中提取数字并获取整数的数组?
- 18. 如何从浮提取数字在python
- 19. 如何从字符串中提取所有数字(如int)? c#
- 20. 如何从Java中的字符串中提取数字?
- 21. 如何从JavaScript中的字符串中提取数字?
- 22. 如何从jQuery中的字符串中提取数字?
- 23. 如何从BATCH中的字符串中提取数字
- 24. 如何从Python中的字符串中提取数字?
- 25. 如何从Perl中的字符串中提取数字?
- 26. 提取每个第n个字母(数字)
- 27. 在每个数字后提取一个字符串
- 28. 从数字中提取整数
- 29. 从日志中提取数字数据
- 30. 如何从字符串中提取字符串的第一个数字
啊,这是正确的解决方案。你是什么意思? – 2010-09-01 00:10:53
作为一个邪恶的把戏,我转换为一个字符串('sprintf'或'snprintf'),然后'atoi'的char值,所以我可以得到这个数字。它不使用模数或AFAIK除法操作。 – MrMesees 2017-07-02 15:10:24