对于本实验,您将在十进制中输入两个数字并进行翻译 他们到二进制。然后,您将以二进制形式添加数字并打印出来 结果。输入的所有数字将介于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()方法,以便它通过所有测试,那就太好了!即使您不确定它是否会起作用,我们也非常感谢您的帮助!谢谢!
答案 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)
这是我在网站上的第一个答案,所以我希望它适用于您的测试