Popis problému
Celý popis zadania sa nacháza – Hackerrank.
Riešenie
Definoval som si najväčšie možné neznamienkové celé číslo v dvojkovej sústave 11 111 111 111 111 111 111 111 111 111 111
.
Pre každé zadané číslo som vykonal operáciu XOR
so zadaným maximom a vypísal výsledok.
Nie všetky programovacie jazyky podporujú štandardne znamienkové celé čísla. Vtedy je lepšie použiť celočíselný formát väčší ako 32 bit.
Vytvoril som riešenie v týchto programovacích jazykoch:
Všetky riešenia sú dostupné aj na mojom GitHub profile.
Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import java.util.Scanner; public class FlippingBits { private static int MAX = 0b11_111_111_111_111_111_111_111_111_111_111; public static void main(String[] args) { Scanner stdin = new Scanner(System.in); int tests = Integer.parseInt(stdin.nextLine()); for(int i = 0; i < tests; i++) { int input = (int) Long.parseLong(stdin.nextLine()); System.out.println(Long.valueOf(Integer.toBinaryString(MAX ^ input), 2)); } stdin.close(); } } |
JavaScript
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
function processData(input) { var numbers = input.split("\n").map(function(item) {return parseInt(item);}); for(var i = 1; i < numbers.length; i++ ) { console.log((~numbers[i]) >>> 0); } } process.stdin.resume(); process.stdin.setEncoding("ascii"); _input = ""; process.stdin.on("data", function (input) { _input += input; }); process.stdin.on("end", function () { processData(_input); }); |
Scala
1 2 3 4 5 6 7 8 9 |
import scala.io.Source object FlippingBits extends App { private[this] val MAX = java.lang.Long.parseLong("11111111111111111111111111111111", 2) val numbers = Source.stdin.getLines().drop(1).map(_.toLong) val flipped = numbers.map(_ ^ MAX) println(flipped.mkString("\n")) } |
Ruby
1 2 3 4 |
tests = gets.to_i tests.times do puts 0xffffffff ^ gets.to_i end |