给定一个字符串(S)作为输入,您需要通过将仅包含“0”和“1”的数字相加来生成字符串,您需要找到生成字符串S所需的仅包含“0”和“1”的最小数字。输入:3401要生成这个数字,我们需要将这四个数字相加:1101 + 1100 + 1100 + 0100 = 3401输入输出3027 3 3401 4我试图通过将input作为int并将其分解为二进制,然后将其作为二进制读取来解决此问题,但无法做到这一点
wlwcrazw1#
首先,我们创建一个包含数字的每个数字的数组。为了创建最少数量的字符串,我们必须创建最大的数字。为此,我们使用每个可用的数字来形成一个字符串。如果使用了一个数字,我们将'1'附加到字符串,否则为'0'。然后,我们将使用的数字减1,并将数字减形成的数字。我们重复这个过程,直到数字为0。
Scanner sc = new Scanner(System.in); String s = sc.next(); int len = s.length(); int[] arr = new int[len]; for(int i=0;i<len;i++){ arr[i] = Integer.parseInt(String.valueOf(s.charAt(i))); } int num = Integer.parseInt(s); while(num>0){ StringBuilder temp = new StringBuilder(); for(int i=0;i<len;i++){ if(arr[i]>0){ temp.append(1); } else { temp.append(0); } arr[i]--; } System.out.println(temp); int var = Integer.parseInt(temp.toString()); num-=var; }
1条答案
按热度按时间wlwcrazw1#
首先,我们创建一个包含数字的每个数字的数组。为了创建最少数量的字符串,我们必须创建最大的数字。为此,我们使用每个可用的数字来形成一个字符串。如果使用了一个数字,我们将'1'附加到字符串,否则为'0'。然后,我们将使用的数字减1,并将数字减形成的数字。我们重复这个过程,直到数字为0。