数字的补数
对整数的二进制表示取反(0 变 1 ,1 变 0)后,再转换为十进制表示,可以得到这个整数的补数。
例如,整数 5 的二进制表示是 "101" ,取反后得到 "010" ,再转回十进制表示得到补数 2 。
给你一个整数 num ,输出它的补数。
示例 1:
输入:num = 5
输出:2
解释:5 的二进制表示为 101(没有前导零位),其补数为 010。所以你需要输出 2 。
示例 2:
输入:num = 1
输出:0
解释:1 的二进制表示为 1(没有前导零位),其补数为 0。所以你需要输出 0 。
提示:
1 <= num < 231
import java.util.Scanner; public class Test { public static class ListNode{ //定义单链表 public int e; public ListNode next; ListNode() {} ListNode(int e) { this.e = e; } ListNode(int e, ListNode next) { this.e = e; this.next = next; } } ListNode head; int size; public void LinkedList(){ //初始化头结点 head = new ListNode(0 ,null); size = 0; } public void insert(int number){ //插入元素进链表 ListNode temp = head; // 1、先让要添加的节点指向temp的下一个节点 ListNode newNode = new ListNode(number,temp.next); // 2、再将temp的next指向node temp.next = newNode; size++; //链表长度加1 } public int re(int number){ //二进制取反 if(number == 1){ return 0; }else { return 1; } } public static void main(String[] args) { Scanner print = new Scanner(System.in); // int i = print.nextInt(); //输入 int j = 0,num = 0,m; int i = 2; m = i; // 保存i值; Test test = new Test(); test.LinkedList(); if(i<0){ //判断正负 i = -i; } while (i!=0){ j = test.re(i%2); test.insert(j); i = i/2; //重置 } ListNode p = test.head.next; //定义单链表头结点下一个结点p for (int k = test.size-1; k >= 0; k--) { //求十进制,得到补数 num += (int)Math.pow(2,k)*p.e; p = p.next; } if(m<=0){ System.out.println(-num); }else { System.out.println(num); } } }


浙公网安备 33010602011771号