求助: C++ 数组越界不报错问题
查看原帖
求助: C++ 数组越界不报错问题
704724
raysun007楼主2023/2/24 00:36

求助: C++数组越界

已通过本题,但是使用初版程序(如下)运行时, 当输入为1000 0时,编译器未爆数组下标越界错误,请教luogu的各位同学解答一下

#include<iostream>
#include<cmath>
#include<cstdio>
#include<algorithm>
#include<string>
#include<set>
#include<unordered_set>
#include<vector>
#include<climits>
#include<limits>
#include<map>
#include<unordered_map>
#include<string.h>

using namespace std;

int arr[500];
int lenArr = 0;

void multiple(int* array, int len, string num) {
  reverse(num.begin(), num.end());

  int lenT = len + num.size();
  int temp[lenT + 1];
  memset(temp, 0, sizeof(temp));
  for (int i = 0; i < len; i++) {
    for (int j = 0; j < num.size(); j++) {
      temp[i + j] += array[i] * (num[j] - '0');
    }
  }

  memset(arr, 0, sizeof(arr));
  for (int k = 0; k < lenT; k++) {
    temp[k + 1] += temp[k] / 10;
    temp[k] %= 10;
    arr[k] = temp[k];
  }

  lenArr = lenT;
}


int main() {
  int t;
  cin >> t;

  int input[t][2];
  for (int i = 0; i < t; i++) {
    cin >> input[i][0] >> input[i][1];
  }

  for (int i = 0; i < t; i++) {
    memset(arr, 0, sizeof(arr));

    int n = input[i][0];
    int a = input[i][1];

    arr[0] = 1;
    lenArr = 1;
    for (int k = 2; k <= n; k++) {
      multiple(arr, lenArr, to_string(k));
    }

    int m = lenArr;
    while (arr[m] == 0) {
      m--;
    }

    int cnt = 0;
    for (int i = 0; i <= m; i++) {
      if (arr[i] == a) {
        cnt++;
      }
    }
    cout << cnt << endl;
  }

  return 0;
}
2023/2/24 00:36
加载中...