Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无Java API的大数字(数组)乘法_Java_Arrays - Fatal编程技术网

无Java API的大数字(数组)乘法

无Java API的大数字(数组)乘法,java,arrays,Java,Arrays,大家好,编程人员 数字以尽可能小的整数数组向后存储: int[] numberA = {7, 3, 6, 2, 1}; //representing number 12,637 int[] numberB = {7, 3, 3}; //representing number 337 现在我想编写一个函数,返回这两个数字的乘积: static int[ ] times(int[ ]a, int[ ] b) { //numberA x numberB = product

大家好,编程人员

数字以尽可能小的整数数组向后存储:

int[] numberA = {7, 3, 6, 2, 1}; //representing number 12,637
int[] numberB = {7, 3, 3};       //representing number 337
现在我想编写一个函数,返回这两个数字的乘积:

static int[ ] times(int[ ]a, int[ ] b) {
    //numberA x numberB = product
    return product;
}
因为12637 x 337=4258669,所以返回的数组应该如下所示:

product = {9, 6, 6, 8, 5, 2, 4};
所有这些都应该在不使用JavaAPI帮助的情况下工作(例如,
Java.util.ArrayList
)。 我已经在相同的脚本中创建了类似的函数,可以使用:

  • 添加两个数字(数组)(
    int[]add(int[]int[])
  • 与一位数整数相乘(
    int[]timesInt(int[],int)
  • 复制数组(
    int[]复制(int[])
  • 从int创建数字(数组)(
    int[]从int(int)


谢谢

你知道Karatsuba或Cook算法吗?也许你能实现它们?

我有一个程序,它将创建您在问题中发布的结果,我没有使用您指定的任何类似arraylist的java API,代码是:

public class Test
{

static int[ ] times(int[ ]a, int[ ] b) {

    String astr="",bstr="";

  for(int i=a.length-1;i>=0;i--)
  {
      astr=astr+a[i];//Converts the int array's to string to reverse them without any other than String methods.
  }

  for(int i=b.length-1;i>=0;i--)
  {
      bstr=bstr+b[i]; //Converts the int array's to string to reverse them without any other than String methods.
  }

  int var1=Integer.parseInt(astr); // Converting the reversed string back to int for computing result

  int var2=Integer.parseInt(bstr); // Converting the reversed string back to int for computing result

  long result=var1*var2; //Computing result


   String newstr=String.valueOf(result); // Converting the final result back to String


   int temp[]=new int[newstr.length()];// Creating the array to hold final result in it

    int counter=0;

    for (int i =newstr.length()-1;i>=0;i--) {

        String nwresult="";
        nwresult=nwresult+newstr.charAt(i);  //reversing the final answer string

         temp[counter++]= Integer.parseInt(nwresult); //Returning the final answer string by converting it to integer

    }

     return temp;

}


 public static void main(String args[])
 {
     int[] numberA = {7, 3, 6, 2, 1}; 
     int[] numberB = {7, 3, 3};  

     int array[]=times(numberA,numberB);

     for(int i=0;i<array.length;i++)
     {
         System.out.print(array[i]);
     }

     System.out.println("");

  }

}
公共类测试
{
静态int[]次(int[]a,int[]b){
字符串asr=“”,bstr=“”;
对于(int i=a.length-1;i>=0;i--)
{
astr=astr+a[i];//将int数组的转换为字符串,以在不使用任何字符串方法的情况下反转它们。
}
对于(int i=b.length-1;i>=0;i--)
{
bstr=bstr+b[i];//将int数组的转换为字符串,以在不使用任何字符串方法的情况下反转它们。
}
int var1=Integer.parseInt(asr);//将反向字符串转换回int以获得计算结果
int var2=Integer.parseInt(bstr);//将反向字符串转换回int以获得计算结果
long result=var1*var2;//计算结果
String newstr=String.valueOf(result);//将最终结果转换回String
int temp[]=new int[newstr.length()];//创建数组以在其中保存最终结果
int计数器=0;
对于(int i=newstr.length()-1;i>=0;i--){
字符串nwresult=“”;
nwresult=nwresult+newstr.charAt(i);//反转最终答案字符串
temp[counter++]=Integer.parseInt(nwresult);//通过将其转换为整数返回最终答案字符串
}
返回温度;
}
公共静态void main(字符串参数[])
{
int[]numberA={7,3,6,2,1};
int[]numberB={7,3,3};
int数组[]=次(numberA,numberB);

对于(int i=0;i)和您迄今为止尝试过的(代码方面,您自己)是什么?这读起来像是一个家庭作业。您可以尝试使用循环从数组中提取一个
int
值,即
12637
。这是您想要的吗?@Rogue实际上我试图修改“add”-函数以适应乘法运算,但我无法生成具有动态长度的数组。我还尝试模拟笔/纸相乘的步骤(如小学时)通过在0中滑动来总结最终结果product@TheRedRabbit-假设字符串中没有尾随的零,乘积的长度将是A.length+B.length-1。在乘法操作期间,在字符串前面插入零并使用加法函数的方法应该有效。在查找之前,您可能应该先让它起作用在Karatsuba这样的优化中,你会感到惊讶。虽然链接可能会带来一个解决方案,但它不如写答案好,因为链接可能会被破坏。这些都是众所周知的算法,所以如果链接被破坏,你可以在其他地方找到它们。在这种情况下,你是对的。然而,情况通常不是这样。@kleineLotti Vielen Dank!我没有听说过这样的算法,并将通读文章。祝你玩得开心,它们真的很基础,也很有名!我认为这里的目标是在不转换为整数的情况下对字符串进行乘法。