二进制计算器分配

时间:2016-02-13 01:17:03

标签: java

  

对于本实验,您将在十进制中输入两个数字并进行翻译   他们到二进制。然后,您将以二进制形式添加数字并打印出来   结果。输入的所有数字将介于0到255之间(包括0和255)   和二进制输出限制为8位。这意味着总和   两个添加的数字也将限制为8位。如果总和了   两个数字超过8位,请打印前8位数字   总和和消息“错误:溢出”。你的程序应该   用整数数组表示二进制数,用数字表示   (2 ^ 0)存储在索引0处,两位数(2 ^ 1)存储在索引1处,全部   从索引7处存储的2 ^ 7位数字的方式。你的程序应该   包括以下方法:

     
      
  • int[] convertToBinary(int b)将参数转换为二进制值,并将其作为整数数组存储。
  •   
  • void printBin(int b[])在一行中输出存储在数组中的二进制数。请注意,应该只有一个空格   每个输出0或1之间。
  •   
  • int[] addBin(int a[], int b[])添加存储在数组中的两个二进制数,并以新的整数数组返回总和。
  •   

当我将代码输入CodeRunner(测试代码并根据每个测试的结果返回一个等级)时,我似乎无法通过其中一个测试。这是我得到的信息:

* 44个测试中有43个通过正确。你的分数是97%。

失败的测试是:测试:addBin()方法错误:返回错误的数字*

继承我的代码:

import java.util.Scanner;

class Main {
    public static int[] convertToBinary(int a) {
        int[] bin = {0, 0, 0, 0, 0, 0, 0, 0};
        for (int i = bin.length - 1; i >= 0; i--) {
            bin[i] = a % 2;
            a = a / 2;
        }
        return bin;
    }

    public static void printBin(int[] b) {
        int z;
        for (z = 0; z < b.length; z++) {
            System.out.print(b[z] + " ");
        }
        System.out.println();
    }

    public static int[] addBin(int[] c, int[] d) {
        int[] added = new int[8];
        int remain = 0;
        for (int x = added.length - 1; x >= 0; x--) {
            added[x] = (c[x] + d[x] + remain) % 2;
            remain = (c[x] + d[x] + remain) / 2;
        }
        if (added[0] + c[0] + d[0] == 1) {
            added[0] = 1;
        } else if ((added[0] + c[0] + d[0] == 2) || (added[0] + c[0] + d[0] == 3)) {

            System.out.println("Error: overflow");
        }
        return added;
    }

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("Enter a base ten number between 0 and 255, inclusive.");
        int num1 = scan.nextInt();
        System.out.println("Enter a base ten number between 0 and 255, inclusive.");
        int num2 = scan.nextInt();

        int[] bin;
        bin = convertToBinary(num1);
        System.out.println("First binary number:");
        printBin(bin);
        int[] bin1 = bin;

        bin = convertToBinary(num2);
        System.out.println("Second binary number:");
        printBin(bin);
        int[] bin2 = bin;


        System.out.println("Added:");
        {
            printBin(addBin(bin1, bin2));
        }
    }
}

如果有人可以查看我上面的代码,看看他们是否可以告诉我需要更改什么来修复addbin()方法,以便它通过所有测试,那就太好了!即使您不确定它是否会起作用,我们也非常感谢您的帮助!谢谢!

1 个答案:

答案 0 :(得分:2)

嗨首先请原谅我的英语,但我猜你的任务也接受1和255。所以我添加了其中两个并在代码中得到1 0 0 0 0 0 0 0。但我认为它需要是0 0 0 0 0 0 0 0且有溢出错误。所以我改变了你的代码。

DECLARE @InputMatchingRuleId  INT = 30
;WITH CTE1
AS
(
    SELECT DENSE_RANK() OVER(ORDER BY LT.TAGID) AS RN,LT.TagID,LT.LOGID 
    FROM MatchingRule MR INNER JOIN LogTag LT ON LT.TagID = MR.TagID 
    WHERE MatchingRuleID=@InputMatchingRuleId

),
CTE2
AS
(
    SELECT 1 AS RN2,LOGID FROM CTE1 C1 WHERE C1.RN=1
    UNION ALL
    SELECT RN2+1 as RN2,C2.LOGID 
    FROM CTE1 C1 INNER JOIN CTE2 C2 ON C1.RN = C2.RN2+1 AND C1.LOGID = C2.LOGID
)

  SELECT DISTINCT LOGID FROM CTE2 
  WHERE RN2>(CASE WHEN (SELECT MAX(RN2) FROM CTE2)=1 THEN 0 ELSE 1 END)

这是我在网站上的第一个答案,所以我希望它适用于您的测试