联合国科教文组织要统计人口,显然一般的int不能满足需要,因此要求定义一个biginteger的新类,实现超长整型数的加减乘除四则运算,我用转化为数组的方法实现了加、减,有点小bug,而且不知道怎么实现乘除:(
import java.io.bufferedreader;
import java.io.ioexception;
import java.io.inputstreamreader;
//6.7.11
public class biginteger//定义长整型的类
{
private static final int add1max=100;//可计算最长位数
private static final int add2max=100;//同上
private char[] add1 = new char[add1max];
private char[] add2 = new char[add1max];
private int len1;
private int len2;
public void setadd1() throws ioexception
{
int i=0;
string sline1;
system.out.print("please input add1 : ");//输入第一个长整数
bufferedreader in = new bufferedreader(new inputstreamreader(system.in));
sline1=in.readline();
for(;i<sline1.length();i++)
add1[i]=sline1.charat(i);
for(i=0;i<add1max;i++)//len1=add1.length()
{
if(add1[i]!='/0')
len1++;
}
}
public void setadd2() throws ioexception
{
int i=0;
string sline2;
system.out.print("please input add2 : ");//输入第二个长整数
bufferedreader in2 = new bufferedreader(new inputstreamreader(system.in));
sline2 = in2.readline();
for(i=0;i<sline2.length();i++)
add2[i]=sline2.charat(i);
for(i=0;i<add2max;i++)//len2=add2.length()
{
if(add2[i]!='/0')
len2++;
}
}
public char[] getadd1()
{
return add1;
}
public char[] getadd2()
{
return add2;
}
public int getlen1()
{
return len1;
}
public int getlen2()
{
return len2;
}
public void add(char[] add1,char[] add2)//biginteger相加方法
{
int len = math.max(len1,len2);
int i;
char[] temp1 = new char[len];
char[] temp2 = new char[len];
char[] result = new char[len+1];
for(i=0;i<len1;i++)
temp1[len-1-i]=add1[len1-1-i];
for(i=0;i<len2;i++)
temp2[len-1-i]=add2[len2-1-i];
int m=0;
for(i=0;i<len;i++)//相加
{
if(temp1[len-1-i]!=0)
temp1[len-1-i]-=48;
if(temp2[len-1-i]!=0)
temp2[len-1-i]-=48;
m=temp1[len-1-i]+temp2[len-1-i];
if(m>=10)
{
m-=10;
result[len-i]+=m;
result[len-1-i]+=1;
}
else result[len-i]+=m;
}
system.out.print("add1 + add2 = ");//输出相加结果
i=0;
if(result[0]==0)
i=1;
for(;i<len+1;i++)
system.out.print(integer.tostring(result[i]));
}
public void sub(char[]sub1,char[]sub2)//biginteger相减方法
{
int len = math.max(len1,len2);
int i;
char[] temp1 = new char[len];
char[] temp2 = new char[len];
char[] result = new char[len+1];
if(len1>len2)
{
for(i=0;i<len1;i++)
temp1[len-1-i]=sub1[len1-1-i];
for(i=0;i<len2;i++)
temp2[len-1-i]=sub2[len2-1-i];
}else//保证减数大于被减数
{
for(i=0;i<len1;i++)
temp2[len-1-i]=sub1[len1-1-i];
for(i=0;i<len2;i++)
temp1[len-1-i]=sub2[len2-1-i];
}
int m=0;
for(i=0;i<len;i++)//相减
{
if(temp1[len-1-i]!=0)
temp1[len-1-i]-=48;
if(temp2[len-1-i]!=0)
temp2[len-1-i]-=48;
m=temp1[len-1-i]-temp2[len-1-i];
if(m<0)//如果计算的那一位的减数小于被减数那么相前一位借10
{
m+=10;
result[len-i]+=m;
temp1[len-1-i]-=1;
}
else result[len-i]+=m;
}
system.out.print("add1 - add2 = ");//输出减法结果
i=0;
while(result[i]==0)
i++;
if((len2>len1)||(len1==len2&&sub1[0]<sub2[0]))
system.out.print("-");
for(;i<len+1;i++)
system.out.print(integer.tostring(result[i]));
}
public static void main(string[] args) throws ioexception//主方法
{
biginteger big = new biginteger();//生成一个biginteger对象
big.setadd1();//得到数1
big.setadd2();//得到数2
char[] num1 = big.getadd1();//相加
char[] num2 = big.getadd2();//相减
int len1 = big.getlen1();
int len2 = big.getlen2();
system.out.println();
system.out.println("the length of add1 is : " + len1);
system.out.println("the length of add2 is : " + len2);
big.add(num1,num2);
system.out.println();
big.sub(num1,num2);
}
}
闽公网安备 35060202000074号