Extract numbers from an integer

3 次查看(过去 30 天)
Jennifer Pettersson
Jennifer Pettersson 2017-11-12
编辑: Stephen23 2017-11-16
I want to write code that allows the user to enter a number, for example 123411 and that matlab answers with how many ones the input contains, in this case 3. Can't seem to figure this out!

回答(4 个)

Jan
Jan 2017-11-12
This sounds like a homework question. The solution is not hard and it should be possible to solve. Unfortunately you did not post, what you have tried so far and did not ask a specific question. So how can we help you beside posting the working solution?
s = input('Type in the number: ', 's');
n1 = sum(s == '1')
And now? Can you submit this as your solution? Does it help you to learn Matlab if I post a solution?
Read the docs for nnz for a slightly different solution. And for the next time, please post you code (even if it is not working) and ask specific questions.
  2 个评论
Jennifer Pettersson
Jennifer Pettersson 2017-11-12
Well, you're right.. I've tried for several hours with both ismember and find but neither did work, or even be near the solution.
Jan
Jan 2017-11-13
编辑:Jan 2017-11-13
This is fine also:
sum(ismember(s, '1'))
length(find(s == '1'))
length(strfind(s, '1'))
If the number is provided numerically, use sprintf('%g') to convert it to a CHAR vector.

请先登录,再进行评论。


KL
KL 2017-11-12
N = 123411;
noOfOnes = nnz((dec2base(N,10) - '0')==1);

Jennifer Pettersson
Jennifer Pettersson 2017-11-16
Is there any possibility to solve this with integers only? For example with mod instead? Can't seem to figure this out!

Stephen23
Stephen23 2017-11-16
编辑:Stephen23 2017-11-16
If you do not want to convert to string and can only perform numeric operations, then you can use mod and division in a loop:
N = 123411;
C = 0;
while N>0
C = C+(1==mod(N,10));
N = floor(N/10);
end
giving:
>> C
C = 3

类别

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