how can i check if n2 is a sub number of n1? (HW qst.)

for ex.:
n1 = 123; n2 = 12; (n1>=n2)
n2 is a sub number of n1
i can't make any use of strings or arrays

7 Comments

What is the class of n1 and n2? Strings, number??? What does this say:
whos n1
I'm not sure you can do it if you can use strings or arrays. Is a scalar (single number but not an array of 2 or more number) allowed? Also define subnumber. Is 2 a subnumber of 4 because it's a factor of 4? Or do the digits have to be in order in the larger number, like 22 and 42 are subnumbers of 4422, even though they may not be integer factors of it.
the class of n1 and n2 is double
scalar is allowed
the digits have to be in order in the larger number, like 22 and 42 are subnumbers of 4422, even though they may not be integer factors of it.
Not using strings, this is not trivial (at least I haven't come up with a trivial way to do it yet, maybe a conversion to binary and comparison? or dynamic programming with mod, log10?).
i suppose it's connected somehow with mod fun.
Zaza
Zaza on 4 Jan 2013
Edited: Zaza on 4 Jan 2013
suppose i have
n1 = 12345;
how can i omit the first (in the highest power of 10) digit to get
n1 = 2345;
and so on
in this way if n2 is a sub number of n1 it'll match...
The highest power of 10 correspond to 1 not 5
check this
2345-fix(2345/10^3)*10^3
then
345-fix(345/10^2)*10^2
and so on

Sign in to comment.

 Accepted Answer

Here is a hint:
a = 131245;
b = 12;
op = @(x)hidden_for_you_to_figure_out(x);
pa = op(a);
pb = op(b);
isASub = false; %guilty until proven innocent
for ii = pb:pa
amii = mod(a,(10^ii));
if amii == b
isASub = true;
return;
else
for jj = 1:(ii-pb)
afjj = floor(amii./(10^jj));
if b == afjj
isASub = true;
return;
end
end
end
end
All you have to do it figure out the contents of op().

More Answers (2)

n1=12456;
n2=245
a=num2str(n1);
b=num2str(n2);
c=all(ismember(b,a))
if c is equal to 1 that means n2 is a sub number of n1

6 Comments

i'm not sure about num2str because strings are not allowed in this problem
these are the requirements
I will give you hints:
a=124 ;a1=1, a2=2, a3=4
to find a3:
a3=fix(a/10^2); %(an=fix(a/10^(n-1))
In your previous question the number of digit in an integer number is
int=-123456789
digit_number=max(ceil(log10(abs(int))),1)
can i use floor instead of fix?

Sign in to comment.

Create a function that calculates the decimal expansion of a number in reverse order. mod() 10 gives the next digit to be output, integer division by 10, if the result is non-zero keep going.
Apply that to both numbers.
Now match the reversed n2 to the reversed n1.

Categories

Tags

Community Treasure Hunt

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

Start Hunting!