算出来是正确的,请大家看看,哪些代码会使运行超时呢?不胜感激!
public class BigBinary {
private int[] bits;
private boolean positive;
public BigBinary(int[] bits, boolean positive) {
this.bits=new int[bits.length];
for(int i=0;i<bits.length;i++){
this.bits[i]=bits[i];
this.positive = positive;
}
}
public String toString() {
String x = "";
for (int i = 0; i < bits.length; i++) {
x = x + bits[i];
}
if (x.contains("1")) {
int t = x.indexOf("1");
x = x.substring(t, x.length());
if (positive == false) {
x = "-" + x;
}
} else {
x = "0";
}
return x;
}
public String to() {
String x = "";
for (int i = 0; i < bits.length; i++) {
x = x + bits[i];
}
if (x.contains("1")) {
int t = x.indexOf("1");
x = x.substring(t, x.length());
} else {
x = "0";
}
return x;
}
public BigBinary add(BigBinary bigbinary) {
if(bits.length==0) {
this.bits=bigbinary.bits;
this.positive= bigbinary.positive;
return bigbinary;
}
if(bigbinary.bits.length==0)
{
return this;
}
int[] c;
int[] bu;
if (this.positive && bigbinary.positive) {
if (this.bits.length > bigbinary.bits.length) {
c = new int[this.bits.length+1];
bu = new int[this.bits.length];
for (int i = this.bits.length - bigbinary.bits.length; i < this.bits.length; i++) {
bu[i] = bigbinary.bits[i-bits.length+bigbinary.bits.length];
}
for (int i = c.length - 1; i >= 1; i--) {
c[i] = c[i]+bits[i-1] + bu[i-1];
if (c[i] == 2) {
c[i] = 0;
c[i - 1]++;
}
if (c[i] == 3) {
c[i] = 1;
c[i - 1]++;
}
}
} else {
c = new int[bigbinary.bits.length+1];
bu = new int[bigbinary.bits.length];
for (int i =bigbinary.bits.length - bits.length; i < bigbinary.bits.length; i++) {
bu[i] = bits[i-bigbinary.bits.length+ bits.length];
}
for (int i = c.length - 1; i >= 1; i--) {
c[i] =c[i]+ bigbinary.bits[i - 1] + bu[i-1];
if (c[i] == 2) {
c[i] = 0;
c[i - 1]++;
}
if (c[i] == 3) {
c[i] = 1;
c[i - 1]++;
}
}
}
BigBinary result = new BigBinary(c, true);
this.bits = c;
return result;
}
if (this.positive == false && bigbinary.positive == false) {
if (this.bits.length > bigbinary.bits.length) {
c = new int[this.bits.length+1];
bu = new int[this.bits.length];
for (int i = this.bits.length - bigbinary.bits.length; i < this.bits.length; i++) {
bu[i] = bigbinary.bits[i-bits.length+bigbinary.bits.length];
}
for (int i = c.length - 1; i >= 1; i--) {
c[i] = c[i]+bits[i-1] + bu[i-1];
if (c[i] == 2) {
c[i] = 0;
c[i - 1]++;
}
if (c[i] == 3) {
c[i] = 1;
c[i - 1]++;
}
}
} else {
c = new int[bigbinary.bits.length+1];
bu = new int[bigbinary.bits.length];
for (int i =bigbinary.bits.length - bits.length; i < bigbinary.bits.length; i++) {
bu[i] = bits[i-bigbinary.bits.length+ bits.length];
}
for (int i = c.length - 1; i >= 1; i--) {
c[i] =c[i]+ bigbinary.bits[i - 1] + bu[i-1];
if (c[i] == 2) {
c[i] = 0;
c[i - 1]++;
}
if (c[i] == 3) {
c[i] = 1;
c[i - 1]++;
}
}
}
BigBinary result = new BigBinary(c, false);
this.bits = c;
return result;
}
if (positive == true && bigbinary.positive == false) {
BigBinary b=new BigBinary(bigbinary.bits,true);
return this.minus(b);
}
if (positive == false && bigbinary.positive == true) {
BigBinary b=new BigBinary(bigbinary.bits,false);
return this.minus(b);
}
return null;
}
public BigBinary minus(BigBinary bigbinary) {
if(bits.length==0) {
if (bigbinary.positive) {
BigBinary r = new BigBinary(bigbinary.bits, false);
this.bits=r.bits;
this.positive=false;
return r;
}
else {
BigBinary r = new BigBinary(bigbinary.bits, true);
this.bits=r.bits;
this.positive=true;
return r;
}
}
if(bigbinary.bits.length==0)
{
return this;
}
int y = 2;
int p=0;
int q=0;
for(int i=0;i< bits.length;i++)
{
if(bits[i]==1)
{
p=i;
break;
}
}
for(int i=0;i< bigbinary.bits.length;i++)
{
if(bigbinary.bits[i]==1)
{
q=i;
break;
}
}
if (bits.length-p == bigbinary.bits.length-q) {
for (int i = p; i < bits.length; i++) {
{
if (bits[i] > bigbinary.bits[i - p + q]) {
y = 0;
break;
}
if (bits[i] < bigbinary.bits[i - p + q]) {
y = 1;
break;
}
}
}
}
int[] c;
int[] bu;
if (positive && bigbinary.positive) {
if (bits.length-p > bigbinary.bits.length-q || y == 0) {
c = new int[bits.length];
bu = new int[bits.length];
for (int i = bits.length-1; i>=bits.length-bigbinary.bits.length+q; i--) {
bu[i] = bigbinary.bits[i- bits.length+bigbinary.bits.length];
}
for (int i =c.length-1; i >= 0; i--) {
c[i] = bits[i] - bu[i];
if (c[i] == -1&&i>=1) {
c[i]=1;
bits[i-1]--;
}
if(c[i]==-2&&i>=1)
{
c[i]=0;
bits[i-1]--;
}
}
BigBinary result = new BigBinary(c, true);
this.bits = c;
return result;
} else {
BigBinary b=new BigBinary(bigbinary.bits, bigbinary.positive);
c = new int[bigbinary.bits.length];
bu = new int[bigbinary.bits.length];
for (int i = bigbinary.bits.length-1; i>=bigbinary.bits.length-bits.length+p; i--) {
bu[i] = bits[i- bigbinary.bits.length+bits.length];
}
for (int i = c.length - 1; i >= 0; i--) {
c[i] = b.bits[i] - bu[i];
if (c[i] == -1&&i>=1) {
c[i]=1;
b.bits[i-1]--;
}
if(c[i]==-2&&i>=1)
{
c[i]=0;
b.bits[i-1]--;
}
}
BigBinary result = new BigBinary(c, false);
this.bits = c;
this.positive = false;
return result;
}
}
if (positive == false && bigbinary.positive == false) {
if (bits.length-p > bigbinary.bits.length-q || y == 0) {
c = new int[bits.length];
bu = new int[bits.length];
for (int i = bits.length-1; i>=bits.length-bigbinary.bits.length+q; i--) {
bu[i] = bigbinary.bits[i- bits.length+bigbinary.bits.length];
}
for (int i =c.length-1; i >= 0; i--) {
c[i] = bits[i] - bu[i];
if (c[i] == -1&&i>=1) {
c[i]=1;
bits[i-1]--;
}
if(c[i]==-2&&i>=1)
{
c[i]=0;
bits[i-1]--;
}
}
BigBinary result = new BigBinary(c, false);
this.bits = c;
return result;
} else {
BigBinary b=new BigBinary(bigbinary.bits, bigbinary.positive);
c = new int[bigbinary.bits.length];
bu = new int[bigbinary.bits.length];
for (int i = bigbinary.bits.length-1; i>=bigbinary.bits.length-bits.length+p; i--) {
bu[i] = bits[i- bigbinary.bits.length+bits.length];
}
for (int i = c.length - 1; i >= 0; i--) {
c[i] = b.bits[i] - bu[i];
if (c[i] == -1&&i>=1) {
c[i]=1;
b.bits[i-1]--;
}
if(c[i]==-2&&i>=1)
{
c[i]=0;
b.bits[i-1]--;
}
}
BigBinary result = new BigBinary(c, true);
this.bits = c;
this.positive = true;
return result;
}
}
if (positive == true && bigbinary.positive == false) {
BigBinary b=new BigBinary(bigbinary.bits,true);
return this.add(b);
}
if (positive == false && bigbinary.positive == true) {
BigBinary b=new BigBinary(bigbinary.bits,false);
return this.add(b);
}
return null;
}
public static BigBinary add(BigBinary b1, BigBinary b2) {
BigBinary b=new BigBinary(b1.bits, b1.positive);
BigBinary c=new BigBinary(b2.bits, b2.positive);
return b.add(c);
}
public static BigBinary minus(BigBinary b1, BigBinary b2) {
BigBinary b=new BigBinary(b1.bits, b1.positive);
BigBinary c=new BigBinary(b2.bits, b2.positive);
return b.minus(c);
}
}
检查一下for的位置,尤其是for套for,时间就是O(n*n)了,望采纳
OJ 那个题目呢,这个明眼看不出来,需要看你的题目,
校友好