数位和最小
一个数字的数位和定义为这个数字所有位置的数值的总和,例如:
1234的数位和为:1 + 2 + 3 + 4 = 10
5463的数位和为:5 + 4 + 6 + 3 = 18
现在有三个数A、B、C,需要你求出在A、B范围内(包括A,B)的一个数X,让X的数位和与C的数位和差值最小。
输入:为一行,一行有三个数A,B,C,使用空额隔开。
(1<=A,B,C<=1,000,000,000)
(0 <= B-A <=100,000)
输出:输出一个数X,如果多个解输出最小的那个解。
二进制权重相同的数字
给定一个数字N,求与数字N相同权重的数字X。
要求:数字X = min(D), D > N
权重:数字N的二进制位上’1’的个数。
N = 5 二进制是101 权重是2 输出X = 6
N = 97 二进制是110001 权重是3 输出X= 98
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| package com.leetcode;
import java.util.Scanner;
public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N; N = sc.nextInt(); System.out.println(fun(N)); } public static int fun(int num){ String str = Integer.toBinaryString(num); str = flip(str); return Integer.parseInt(str, 2); }
public static String flip(String str){ StringBuilder sb = new StringBuilder(); int strLen = str.length(); int flag = 0; for(int i = 0 ;i < strLen;i ++){ char c = str.charAt(strLen - i - 1); if(flag == 0 && c == '1'){ sb.append('0'); flag = 1; } else if(flag == 1 && c == '0'){ sb.append('1'); flag = 2; } else{ sb.append(c); } } if(flag != 2)return str + "0"; else return sb.reverse().toString(); }
}
|
#