嗨,我是编程新手。我想弄脏我的手。我尝试了很多问题,但我总是得到“运行时错误(NZEC) 虽然程序似乎在eclipse上工作得很好,但是“编辑意思是错误。我不能直截了当地说。这是我无法跨越的第一步。我知道这似乎是偏离主题的。我会很感激如果有Spoj经验的人能够得到我的话。它可以帮助其他面临同样问题的人 所以问题是
乘以给定的数字。
输入 n [乘法次数< = 1000]
l1 l2 [要乘的数字(每个最多10000个十进制数字)]
以[]分组的文本不会出现在输入文件中。
输出 乘法的结果。
实施例
输入:
5
4 2
123 43
324 342
0 12
9999 12345
输出:
8
5289
110808
0
123437655
我的代码是
import java.util.Scanner;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args)
{
Main m=new Main();
m.get();
}
public void get()
{
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
if(n<=1000)
{
sc.nextLine();
String[] allNum=new String[n];
for(int i=0;i<n;i++)
allNum[i]=sc.nextLine();
StringTokenizer st;
for(int i=0;i<n;i++)
{
st=new StringTokenizer(allNum[i]," ");
int a=Integer.parseInt(st.nextToken());
int b=Integer.parseInt(st.nextToken());
System.out.println(mul(a,b,1));
}
}
}
public int mul(int a,int b,int pow)
{
if(b==0)
return 0;
int s=b%10;
return (a*s)*pow+mul(a,b/10,pow*10);
}
}
提前致谢。
答案 0 :(得分:0)
您正在尝试读取10K数字作为整数,这是不正确的,即它将从整数限制溢出。相反,我会使用BigInteger并使用multiply
方法来乘以两个大数字。
所以你的界限在这里:
int a=Integer.parseInt(st.nextToken());
int b=Integer.parseInt(st.nextToken());
会改为
BigInteger a = new BigInteger(st.nextToken());
BigInteger b = new BigInteger(st.nextToken());
BigInteger result = a.multiply(b);
答案 1 :(得分:0)
BigInteger
类允许我们处理具有多个数字N的数字,其中N是相当高的数字。乘法就是这种情况
int
将其值更改为BigInteger
BigInteger a = new BigInteger(st.nextToken());
BigInteger b = new BigInteger(st.nextToken());
BigInteger result = a.multiply(b);
System.out.println(result);
因此,他的方法可以使用BigInteger
public BigInteger mul(BigInteger a,BigInteger b,BigInteger pow)
{
if(b.equals(BigInteger.ZERO))
return new BigInteger("0");
BigInteger s = b.mod(BigInteger.TEN);
BigInteger sx = a.multiply(b).add(pow);
return (s.multiply(sx).add(mul(a, b.divide(new BigInteger("10")), pow.pow(10))));
}