将大数字转换为单位数组

时间:2018-03-28 20:55:19

标签: arrays matlab

所以,我需要将任何数字转换为反向并将其放入数组中。

例如:

  

123456789 - > [9 8 7 6 5 4 3 2 1]

我设法为小数字做了这个例子:

n=32134654654213
rev=(fliplr(num2str(n)));
mikos=length(rev);
array=[ ]
for i=1:mikos
   array=[array,str2num(rev(i))]
end

但是当我输入像564465426464334345413435541这样的大数字时,数组总是1x18 double并且不会显示所有数字。

有什么想法吗?

edit正如你在评论中告诉我的那样,它是双重数字可以容纳多少位数的限制。你是对的,如果我使用字符串输入,它就像一个魅力。仍然想知道热,使它作为一个功能,使用这种形式:

  

function digits = GetDigits(n)

2 个答案:

答案 0 :(得分:0)

如评论中所述,您可以对双倍数据可以存储的位数进行限制。 uint64的限制更大(19),但仍不足以存储您的值。我会确保它不会发生。

function digits = GetDigits(n)
%check if the value behaves as a normal integer
if isnumeric(n)
    if n==(n+1),error('n too big, supply as string instead');end
end
rev=(fliplr(num2str(n)));
mikos=length(rev);
array=[ ]
for i=1:mikos
   array=[array,str2num(rev(i))]
end

end

答案 1 :(得分:-1)

例如在C中执行此操作的一种方法,您可以将数字拆分为2个部分,例如324你得到a = 3而b = 24。

对于你的功能你可以递归地执行

function digits = test(n)
if fix(n/10) == 0
    digits = mod(n,10);
else
    digits = test(fix(n/10));
    digits = [digits,mod(n,10)];
end

从数字转换为字符串并返回数字是一项非常昂贵的操作