所以,我需要将任何数字转换为反向并将其放入数组中。
例如:
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)
答案 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
从数字转换为字符串并返回数字是一项非常昂贵的操作