乘以字符串/数组和全局数组

Multiplying strings/arrays and global arrays

本文关键字:数组 全局 字符串      更新时间:2023-10-16

所以我正在做这段代码,其中你扫描一个数字,然后扫描数字对的数字字符串示例

5

55

66

77

88

然后程序应该输出

25 36 49 64 81

这是第一个数字*第二个数字

但矿山产出

25

61//25+36

110//110+49

174//110+64

原因是在我的代码中,我将每个乘法都保存在一个名为 arr2 的数组中,该数组是全局声明的,并且由于我没有将所有值重置回 0,因此它会不断加起来,但问题是不知道如何将所有值重置回 0,因为当我尝试时它不会让我

我没有尝试重置数组的代码,该数组的工作方式与我已经提到的方式相同

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef vector<long long> vi;
typedef pair<long long, long long> pi;
typedef vector<pi> vpi;
#define FOR(i, a, b) for (ll i = ll(a); i < ll(b); i++)
#define ROF(i, a, b) for (ll i = ll(a); i >= ll(b); i--)
#define f first
#define s second
#define pb emplace_back
#define mp make_pair
#define SQ(a) (a) * (a)
#define all(a) (a).begin(), (a).end()
int arr[9999];
int multiply(string a, string b, int n)
{
int r = 0, j = 0;
int x = int(b[0] - 48);
for (int i = n - 1; i >= 0; i--) {
int mult = 0, y = int(a[i] - 48);
mult = x * y + r;
arr[j] = mult % 10;
r = (mult - mult % 10) / 10;
j++;
}
if (r != 0) {
arr[j] = r;
return n + 1;
}
else {
return n;
}
}
int arr2[9999] = { 0 }, u = 0; //here I declared it
int suma(int w, int f)
{
int b[w];
int r = 0;
int s = 0, j = 0;
w = w + f;
for (int i = f; i < w; i++) {
s = arr2[i] + arr[i - f] + r;
arr2[i] = s % 10;
r = (s - s % 10) / 10;
j++;
}
if (r != 0) {
if (w >= u) {
arr2[j] = r;
j++;
}
else {
while (r != 0) {
s = arr2[j] + arr[j - f] + r;
arr2[j] = s % 10;
r = (s - s % 10) / 10;
j++;
}
}
}
int u = max({ w, u, j });
return u;
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int as;
cin >> as;
for (int cfg = 0; cfg < as; cfg++) {
int w, k = 0, l = 0;
string a, b, c;
cin >> a >> b;
reverse(b.begin(), b.end());
for (int i = 0; i < b.length(); i++) {
c = b[i];
w = multiply(a, c, a.length());
k = suma(w, i);
l = max(k, l);
}
int narr[l];
narr[l] = { 0 };
copy(arr2 + 0, arr2 + l, narr);
int n = sizeof(narr) / sizeof(narr[0]);
reverse(narr, narr + n);
int qw = 0;
for (int i = 0; i < l; i++) {
if (narr[i] != 0) {
qw = 1;
}
if (qw == 1) {
cout << narr[i];
}
}
cout << endl;
}
return 0;
}

我尝试但给我一个错误的代码:


#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef vector<long long> vi;
typedef pair<long long, long long> pi;
typedef vector<pi> vpi;
#define FOR(i, a, b) for (ll i = ll(a); i < ll(b); i++)
#define ROF(i, a, b) for (ll i = ll(a); i >= ll(b); i--)
#define f first
#define s second
#define pb emplace_back
#define mp make_pair
#define SQ(a) (a) * (a)
#define all(a) (a).begin(), (a).end()
int arr[9999];
int multiply(string a, string b, int n)
{
int r = 0, j = 0;
int x = int(b[0] - 48);
for (int i = n - 1; i >= 0; i--) {
int mult = 0, y = int(a[i] - 48);
mult = x * y + r;
arr[j] = mult % 10;
r = (mult - mult % 10) / 10;
j++;
}
if (r != 0) {
arr[j] = r;
return n + 1;
}
else {
return n;
}
}
int arr2[9999] = { 0 }, u = 0; //here I declared it
int suma(int w, int f)
{
int b[w];
int r = 0;
int s = 0, j = 0;
w = w + f;
for (int i = f; i < w; i++) {
s = arr2[i] + arr[i - f] + r;
arr2[i] = s % 10;
r = (s - s % 10) / 10;
j++;
}
if (r != 0) {
if (w >= u) {
arr2[j] = r;
j++;
}
else {
while (r != 0) {
s = arr2[j] + arr[j - f] + r;
arr2[j] = s % 10;
r = (s - s % 10) / 10;
j++;
}
}
}
int u = max({ w, u, j });
return u;
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int as;
cin >> as;
for (int cfg = 0; cfg < as; cfg++) {
arr2[9999] = { 0 }; //here I try to set all the values back to 0
int w, k = 0, l = 0;
string a, b, c;
cin >> a >> b;
reverse(b.begin(), b.end());
for (int i = 0; i < b.length(); i++) {
c = b[i];
w = multiply(a, c, a.length());
k = suma(w, i);
l = max(k, l);
}
int narr[l];
narr[l] = { 0 };
copy(arr2 + 0, arr2 + l, narr);
int n = sizeof(narr) / sizeof(narr[0]);
reverse(narr, narr + n);
int qw = 0;
for (int i = 0; i < l; i++) {
if (narr[i] != 0) {
qw = 1;
}
if (qw == 1) {
cout << narr[i];
}
}
cout << endl;
}
return 0;
}
Format!Style:
C++ online code formatter © 2014 by KrzaQ
Powered by vibe.d, the D language and clang-format

所以问题是是否有办法将所有值重置为 0 或任何其他解决问题的方法,如果可以的话,您可以提交一个有效的代码,而不仅仅是告诉我如何解决它,谢谢

要清除arr数组,您可以使用如下memset

memset(arr, 0, sizeof arr);