 # Ciel and Receipt - On Submission Wrong Answer ? What is wrong with my code?

``````try:
for i in range(int(input())):
p = int(input())
n = p
rem = 0
stri = ''
while n > 0:
rem = n % 2
stri = stri + str(rem)
n = n - rem
n = n // 2
stri = stri[::-1]
if p in range(1,2049):
for j in stri:
else:
for j in stri:
print(p//2048)
else:

except: pass
``````

Check This Out.
Menu Element Is denoted By (2**x) where x ranges from 0-11(inclusive).

My Approach:

1. Create a list menu. where each element is 2**x and x ranges from 0-11 inclusive.
2. start a reverse loop to find the greatest element which is smaller than p.
3. p = p % element found in the previous step
4. increase counter (Answer) by p // element
5. Also add a break statement incase p reaches 0

### CODE:

``````menu = [2**x for x in range(12)]
T = int(input())
for tc in range(T):
p = int(input())
ans = 0
for item in range(11, -1, -1):
if p == 0: break
print(ans)
``````

Approach is
Take all prices in an array in decreasing order.
ar={2048,1024,…,1}
price=k;
int ans=0,i=0;
while(price>0)
{
ans+=(price/ar[i]);
price%=ar[i];
i++;
}
print ans ;

2 Likes