#include <bits/stdc++.h> using namespace std; int main() { int num1,num2,res=0; cin>>num1>>num2; string s1="",s2=""; while(num1) { s1=to_string(num1%2)+s1; num1/=2; } while(num2) { s2=to_string(num2%2)+s2; num2/=2; } while(s1.size()>s2.size()) s2="0"+s2; while(s1.size()<s2.size()) s1="0"+s1; for(int i=0;i<s1.size();i++) if(s1[i]!=s2[i]) res++; cout<<res<<endl; return 0; }
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n1 = sc.nextInt(), n2 = sc.nextInt(); n1 ^= n2; n2 = 0; while (n1 != 0) { if ((n1 & 1) == 1) { n2++; } n1 >>>= 1; } System.out.println(n2); } }
import java.util.Scanner; publicclassMain { publicstaticvoidmain(String[] args) { intn; intm; Scanner sc = newScanner(System.in); m = sc.nextInt(); n = sc.nextInt(); inta,b; intcount = 0; for(inti =1; i<32; i++){ a = m & 1; // 位运算,取二进制的最低位 b = n & 1; if(a != b){ count++; } m = m >>> 1; // 右移一位 n = n >>> 1; } System.out.println(count); } } |
import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc=new Scanner(System.in); int n=sc.nextInt(); int m=sc.nextInt(); n=n^m; m=0; while(n!=0){ ++m; n=n&(n-1); } System.out.println(m); } }先将n和m两数进行异或运算,得到的新数的二进制1的个数就等于前两个整数二进制位的不同个数,最后计算新数的1的个数即可。
#include <stdio.h> int compare(int a,int b) { int count = 0; for (int i = 0; i < 32; i++) { int x = a & (1 << i); int y = b & (1 << i); if (x != y) count++; } return count; } int main() { int a, b; while (scanf("%d %d", &a, &b) != EOF) { int count = compare(a, b); printf("%d\n", count); } return 0; }