每组数据输入一个数
每组数据输出一行,小于等于n的幸运数个数。
21
3
package package1;
import java.math.BigInteger;
import java.util.Scanner;
/**
* @author jiaqing.xu@hand-china.com
* 幸运数
*/
public class LuckyNumber {
/**
* 求一个数字的十进制写法的各个位上数字和
*
* @param number
* @return
*/
public static int getDecimalSum(int number) {
String stringNumber = number + "";
char[] charArray = stringNumber.toCharArray();
int sum = 0;
for (int i = 0; i < charArray.length; i++) {
sum += Integer.valueOf(String.valueOf(charArray[i]));
}
return sum;
}
/**
* 求一个数字二进制写法各个位置数字之和
* @param number
* @return
*/
public static int getBinarySum(int number) {
BigInteger bigInteger = new BigInteger(String.valueOf(number));
String binaryString = bigInteger.toString(2);
char[] charArray = binaryString.toCharArray();
int sum = 0;
for (int i = 0; i < charArray.length; i++) {
sum += Integer.valueOf(String.valueOf(charArray[i]));
}
return sum;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int endNumber = sc.nextInt();
int allCount = 0;
for (int i = 1; i <= endNumber; i++) {
if (getDecimalSum(i) == getBinarySum(i)) {
allCount++;
}
}
System.out.println(allCount);
}
}
}
//菜菜的自己
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
int n = sc.nextInt();
int count=0;
for(int i=1;i<=n;i++){
if(f(i)==g(i)){
count++;
}}
System.out.println(count);
}
sc.close();
}
private static int f(int n){
int res=0;
while(n>0){
res+=n%10;
n/=10;
}
return res;
}
private static int g(int n){
int res=0;
while(n!=0){
res++;
n=n&(n-1);
}
return res;
}
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
while (scan.hasNext()) {
int n = scan.nextInt();
int count = 0;
for (int i = 1; i <= n; i++) {
if (g(i) == f(i)) {
count++;
}
}
System.out.println(count);
}
}
/**
* 十进制数n各个数位置上的和
* @param n
*/
private static int g(int n) {
// TODO Auto-generated method stub
int sum = 0;
String str = String.valueOf(n);
for (int i = 0; i < str.length(); i++) {
sum += str.charAt(i) - 48;
}
return sum;
}
/**
* 十进制数n转成二进制
* 求各个位置上的数之和
* @param n
*/
private static int f(int n) {
// TODO Auto-generated method stub
int sum = 0;
String str = Integer.toBinaryString(n);
for (int i = 0; i < str.length(); i++) {
sum += str.charAt(i) - 48;
}
return sum;
}
}
//统计二进制中1的数目可改为(最优解):n = (n-1)&n
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
int num = in.nextInt();
int count = 0;
for (int i = 1; i <= num; i++)
if (getSum(i, 10) == getSum(i, 2))
count++;
System.out.println(count);
}
}
private static int getSum(int num, int scale) {
int sum = 0;
while (num > 0) {
sum += num % scale;
num /= scale;
}
return sum;
}
}
import java.util.Scanner;
/**
@author AmVilCres
*/
public class Main {
public static void main(String[] args) {
//System.out.println(f(0));
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int count = 0;
for(int i=1; i<=n; i++) {
if(f(i) == g(i))
count++;
}
System.out.println(count);
}
public static int f(int x) {
String xStr = x+"";
char[] chs = xStr.toCharArray();
int fSum = 0;
for(char c :chs) {
fSum += Integer.parseInt((c+""));
}
return fSum;
}
public static int g(int x) {
int cnt=0;
while(x!=0) {
cnt++;
x = x&(x-1);
}
return cnt;
}
}
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int count=0;
for(int i=1;i<=n;i++){
if(f(i)==g(i))
count++;
}
System.out.println(count);
}
public static int f(int n){
int sum=0;
while(n!=0){
sum+=n%10;
n=n/10;
}
return sum;
}
//把一个整数减去1,再和原整数做与运算,会把该整数最右边一个1变成0,
//那么一个整数的二进制表示有多少个1,就可以进行多少次这样的操作
public static int g(int n){
int sum=0;
while(n!=0){
n=n&(n-1);
sum++;
}
return sum;
}
}
好多人都是从int角度开始。这种思路是从String角度出发。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
int io=in.nextInt();
int sss=0;
for(int c=0;c<=io;c++){
String str = String.valueOf(c);
int sum=0;
for(int j=0;j<str.length();j++){
char s=str.charAt(j);
int temp=Integer.parseInt(String.valueOf(s)); //char转int 方法
sum+=temp;
}
int number=Integer.parseInt(str);
String secone=Integer.toBinaryString(number);
int count = 0;
for(int i=0;i<secone.length();i++){
char s=secone.charAt(i);
int temp=Integer.parseInt(String.valueOf(s));
count+=temp;
}
if(sum==count){
sss+=1;
}
}
System.out.println(sss-1);
}
}
import java.util.Scanner;
public class LucyNumber {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while (sc.hasNext()){
int n = sc.nextInt();
if(n < 1) {
System.out.println(0);
}else {
int[] dp2 = new int[n+1];
int[] dp10 = new int[n+1];
int count = 0;
for(int i = 1; i <= n; i++){
dp2[i] = (i & 1) == 0 ? dp2[i >> 1] : dp2[i >> 1] + 1;
dp10[i] = dp10[i/10] + i%10;
if(dp2[i] == dp10[i]) count++;
}
System.out.println(count);
}
}
}
}
public class Main{
//幸运数
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int f, g,sum;
sum = 0;
for(int i=1; i<=n; i++){
f = 0;
g = 0;
//计算f的值
String nstr = String.valueOf(i);
for(int j=0; j<nstr.length(); j++){
int x = Integer.parseInt(nstr.charAt(j) + "");
f += x;
}
//计算g的值
int j = i;
while(j != 0){
int y = j%2;
g += y;
j /= 2;
}
if(f == g){
sum++;
}
}
System.out.println(sum);
}
}