How to break and integer into an array output.

조회 수: 59 (최근 30일)
hello world
hello world 2014년 12월 1일
댓글: Walter Roberson 2020년 12월 23일
I need to build a function that turns an inputted integer into an array. An example is inputInteger = 9876 solution_array = [9 8 7 6] I have a code that works, however, I need it to work without the use of most built-in functions such as mod and possibly even floor. I can however use numel and zeros.
This is the code I have so far:
function solution_array = breakN2digits(inputInteger)
digits =floor(log10(inputInteger)) + 1;
if inputInteger >= 0
solution_array = zeros();
for i=digits:-1:1
solution_array(1,digits+1-i) = floor(inputInteger/(10^(i-1)));
inputInteger = mod(inputInteger,10^(i-1));
end
end
end

답변 (3개)

Azzi Abdelmalek
Azzi Abdelmalek 2014년 12월 1일
a=9876;
b=num2str(a)-'0'
  댓글 수: 3
Walter Roberson
Walter Roberson 2018년 9월 30일
The very first electronic character sets were created based upon purely mechanical concerns about rotation of the appropriate parts. However, once people started to get together to try to standardize character sets, one of the very first things they agreed upon was that no matter what the actual numeric values were to be associated with the digits, that they were to be arranged in consecutive order, '0', '1', ... up to '9' .
Because this ordering property has been guaranteed for decades, you can always convert the character for a digit into the numeric value for the digit by finding the relative position of the digit character to the character for '0', which is easily done by subtracting off the representation of '0' from the representation of the digit character.
Deepak Gupta
Deepak Gupta 2020년 12월 23일
Great explaination Walter.

댓글을 달려면 로그인하십시오.


Pratik Bajaria
Pratik Bajaria 2014년 12월 1일
Hello,
One of the easiest way to do this is fooling the way around.
First convert the number into string. Then run a simple for loop to attain every character, and then finally convert them back to number at the time of allocation.
A simple code to the above algorithm is as shown below.
x=9876;
xstr=num2str(x);
xarray=zeros(1,numel(xstr));
for i=1:numel(xstr)
xarray(i)=str2num(xstr(i));
end
Please let me know in case of any doubts.
Regards, Pratik
  댓글 수: 1
hello world
hello world 2014년 12월 1일
Cannot use built-in function such as num2str

댓글을 달려면 로그인하십시오.


Walter Roberson
Walter Roberson 2020년 12월 23일
If you cannot use floor or mod:
check whether the number is less than zero and if so error (because you cannot convert a negative sign into a digit)
Take uint64 of the number. If the number was double precision and greater than 2^53 then it might not have an exact double precision representation. If the number is greater than 2^64-1 then you are going to have problems doing the conversion using this approach.
Now loop. Divide the current value V by uint64(10) and remember the result Q. Multiply the result Q by uint64(10) giving Q10. Compare Q10 to the original value. If Q10 is greater than V then subtract uint64(1) from Q and uint64(10) from Q10. Now R = V - Q10 is the current last digit, put it at the beginning of the output array. Then assign Q to V. Keep looping until V is 0.
You are probably wondering why you have to do that test about larger than the original. It is because when you do division with integer values, the resulting output rounds rather than truncating. So uint64(37)/uint64(10) does not give 3, it gives 4. 4*10 would then be greater than the original number and that tells you that rounding occurred so reduce the 4 to 3 and the 40 to 30, and then you have 37-30 = 7 is the last digit and 3 is what is left to convert
  댓글 수: 2
Walter Roberson
Walter Roberson 2020년 12월 23일
Do not proceed with double instead of uint64 because you do not have floor or mod and presumably might not trunc() or fix() either, so you might not be able to get rid of the fractions after division by 10.
Walter Roberson
Walter Roberson 2020년 12월 23일
Yes, there are fairly different algorithms available.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by