每组数据输入一个数
每组数据输出一行,小于等于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); } }