当我在spoj上运行它时,为什么我的程序显示“运行时错误(NZEC)编辑功能”

时间:2016-09-12 15:53:38

标签: java

嗨,我是编程新手。我想弄脏我的手。我尝试了很多问题,但我总是得到“运行时错误(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);
}
}

提前致谢。

2 个答案:

答案 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))));
}