Giả sử chúng ta có một số n. Một số là số thập phân nhị phân nếu đó là số nguyên dương và tất cả các chữ số trong ký hiệu thập phân của nó là 0 hoặc 1. Ví dụ:1001 (một nghìn lẻ một) là số thập phân nhị phân, trong khi 1021 thì không. Từ số n, chúng ta phải biểu diễn n dưới dạng tổng của một số số thập phân nhị phân (không nhất thiết phải phân biệt). Sau đó, tính số thập phân nhị phân nhỏ nhất cần thiết cho điều đó.
Vì vậy, nếu đầu vào là n =121, thì đầu ra sẽ là 2, vì giá trị này có thể được biểu diễn dưới dạng 110 + 11 hoặc 111 + 10.
Các bước
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
ans := -1 while n > 0, do: ans := maximum of ans and (n mod 10) n := n / 10 return ans
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
#include <bits/stdc++.h> using namespace std; int solve(int n) { int ans = -1; while (n > 0) { ans = max(ans, n % 10); n /= 10; } return ans; } int main() { int n = 121; cout << solve(n) << endl; }
Đầu vào
121
Đầu ra
2