C++中的长整数乘法 我是C++初学者。我正在尝试这个长整数乘法。我不理解sum[3][0]的值在随后的循环周期中是如何变化的 #include <iostream> #include <string> using namespace std; int main() { string num1, num2; int i,j,l1, l2,temp,k; cout << "Enter first number: "; cin >> num1; cout << "Enter second number: "; cin >> num2; l1= num1.size(); l2= num2.size(); cout << l1 << " " << l2 << endl; int sum[l2-1][l2]; // 5 6 7 8 ---> num1 // 1 2 3 4 ---> num2 for(i=0; i<l1; i++) // --------- num1[i]-='0'; // 2 2 7 1 2 sum[3][4]---->sum[3][0] // 1 7 0 3 4 i.e sum[3][0] should be 2 for(i=0; i<l2; i++) // 1 1 3 5 6 num2[i]-='0'; // 5 6 7 8 // ------------- for(i=l2-1; i>=0; i--) // 7 0 0 6 6 5 2 { k=0; temp=0; for(j=l1-1; j>=0; j--) { temp+=(num2[i]*num1[j]); sum[i][k]= temp%10; temp=temp/10; k++; } sum[i][k]=temp; cout << sum[3][0] << endl; } for(i=l2-1; i>=0; i--) // output is 2 2 7 1 1 Here value of sum[3][0] is 1 but the desired output is 2. { // 1 7 0 3 1 for(k=l2; k>=0; k--) // 1 1 3 5 0 cout << sum[i][k]; // 0 5 6 7 8 cout << endl; } return 0; }

C++中的长整数乘法 我是C++初学者。我正在尝试这个长整数乘法。我不理解sum[3][0]的值在随后的循环周期中是如何变化的 #include <iostream> #include <string> using namespace std; int main() { string num1, num2; int i,j,l1, l2,temp,k; cout << "Enter first number: "; cin >> num1; cout << "Enter second number: "; cin >> num2; l1= num1.size(); l2= num2.size(); cout << l1 << " " << l2 << endl; int sum[l2-1][l2]; // 5 6 7 8 ---> num1 // 1 2 3 4 ---> num2 for(i=0; i<l1; i++) // --------- num1[i]-='0'; // 2 2 7 1 2 sum[3][4]---->sum[3][0] // 1 7 0 3 4 i.e sum[3][0] should be 2 for(i=0; i<l2; i++) // 1 1 3 5 6 num2[i]-='0'; // 5 6 7 8 // ------------- for(i=l2-1; i>=0; i--) // 7 0 0 6 6 5 2 { k=0; temp=0; for(j=l1-1; j>=0; j--) { temp+=(num2[i]*num1[j]); sum[i][k]= temp%10; temp=temp/10; k++; } sum[i][k]=temp; cout << sum[3][0] << endl; } for(i=l2-1; i>=0; i--) // output is 2 2 7 1 1 Here value of sum[3][0] is 1 but the desired output is 2. { // 1 7 0 3 1 for(k=l2; k>=0; k--) // 1 1 3 5 0 cout << sum[i][k]; // 0 5 6 7 8 cout << endl; } return 0; },c++,C++,我在num1=5678和num2=1234的情况下尝试了这段代码。因此,在这种情况下,sum[3][0]应该是2。您没有使sum足够大。您使用sum[0..l2-1][0..l1],因此大小需要为sum[l2][l1+1] 当您超过第二个点心时,通常会使一行点心的一部分与另一行点心的一部分共享存储空间,因此您存储点心[2][0]的位置与以后存储点心[1][4]的位置相同 当超过第一个dim of sum或最后一行中的第二个dim时,sum与其他对象共享存储,例如但不一定是该函数的其他局部变量 此

我在num1=5678和num2=1234的情况下尝试了这段代码。因此,在这种情况下,sum[3][0]应该是2。

您没有使sum足够大。您使用sum[0..l2-1][0..l1],因此大小需要为sum[l2][l1+1]

当您超过第二个点心时,通常会使一行点心的一部分与另一行点心的一部分共享存储空间,因此您存储点心[2][0]的位置与以后存储点心[1][4]的位置相同

当超过第一个dim of sum或最后一行中的第二个dim时,sum与其他对象共享存储,例如但不一定是该函数的其他局部变量

此外,用于显示总和的循环不正确。使用从l2-1到0的总和行和从0到L1的列。但将列l2向下显示为0。列是基于l1计算的,因此应基于l1显示。如果您尝试使用l1不等于l2的示例,则该错误会出现症状。

总和数组的创建应如下所示:

int sum[l2][max(l1,l2)+1];
它太小,现在无法存储您的计算结果

为什么当您写入超出数组边界时程序不会崩溃?因为C++没有任何数组边界检查。< /P>
老实说,您应该通过new声明数组,并在不再需要时通过delete将其删除。C++标准不提供创建新的非恒定大小数组。只有一些编译器支持将其作为扩展,并且许多编译器在执行此操作时会打印警告。此处提供更多信息:

请澄清您面临的确切问题。您得到的输出是什么,您希望得到什么输出,为什么?我希望sum[3][0]应该为上述情况存储2。但我得到1作为输出。总和是多少?它代表什么?我已经编辑了代码。请看一下[OT]:int和[L2-1 ] [L2]不是有效的C++,它使用VLA扩展,使用STD::向量SUML2-- 1,STD::VECCTRL2;相反