引用:
以下是引用 hengheng516 在 2008-4-26 18:55 的发言:
思想我知道, 关键是不知道 写出来,, 一直出错!! 请帮帮我好吗?
import java.util.Random;
public class Xangjia
{
public static int control(int count)//格式控制
{
if(count%5 == 0)System.out.print(" ");
if(count%50 == 0)System.out.println();
count ++;
return count;
}
public static void create(int n[],int len)//生成随机数
{
int count = 1;
Random Rnd=new Random();
for(int i=0;i<len;i++)
{
n[i]=Rnd.nextInt(10);
System.out.print(n[i]);
count = control(count);
}
}
public static void add(int a[],int b[],int sum[],int sign[],int minlen)//相加
{
for(int i = 0; i < minlen; i++)
{
sum[sum.length - 1 - i] = a[a.length - 1 - i] + b[b.length - 1 - i];
if(sum[sum.length - i - 1] > 9)
{
sign[sign.length - 1 - i] += 1;
sum[sum.length - 1 - i] %= 10;
}
}
}
public static void in(int sum[],int sign[])//进位
{
for(int i = 1, j = 0; i < sum.length; i++,j++)
{
sum[sum.length - 1 - i] += sign[sign.length - 1 - j];
if(sum[sum.length - 1 - i] > 9)
{
sign[sign.length - 2 - j] += 1;
sum[sum.length - 1 - i] %= 10;
}
}
}
public static void output(int sum[])//输出
{
int count = 1;
int i = 0;
try//捕获当生成的随机数都为0时产生的异常
{
while(sum[i] == 0)//去除前面是0的数
i++;
}
catch(Exception e){}
while(i < sum.length)//输出结果
{
System.out.print(sum[i]);
count = control(count);
i++;
}
}
public static void main(String[] args)
{
Random Rnd=new Random();
int L1=Rnd.nextInt(100);
int L2=Rnd.nextInt(100);
int max = L1>L2?L1:L2;
int min = L1>L2?L2:L1;
System.out.println("生成的第1个数的位数为"+L1);
System.out.println("生成的第2个数的位数为"+L2);
int a[] = new int[L1];
int b[] = new int[L2];
int sum[] = new int[max+1];
int sign[] = new int[max];
create(a,L1);
System.out.println("\n"+"〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓");
create(b,L2);
System.out.println("\n它们的和是:");
//数组复制,把位数大的数前面不用加的数先存起来
if(L1 > L2)
System.arraycopy(a, 0, sum, 1, (a.length - b.length));
else
System.arraycopy(b, 0, sum, 1, (b.length - a.length));
add(a,b,sum,sign,min);
in(sum,sign);
output(sum);
}
}