开启o2优化就过不了,不开就能过?
  • 板块题目总版
  • 楼主gbz123
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/7/15 17:31
  • 上次更新2024/7/15 17:35:32
查看原帖
开启o2优化就过不了,不开就能过?
1383975
gbz123楼主2024/7/15 17:31

代码如下,真心不理解为什么开启o2优化过不了,每个数据点都提示第一行第一列是p,不开能过,但是我自己用vs跑可以正确输出

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cstdio>
#include<cstring>
#include<stdlib.h>
using namespace std;
char a[60][5000]={0}, len[5000],temp[5000];
int main() {
   int i,jw=0,n,j=0,t;
   a[1][0] = 1;
   len[1] = 1;
   for (i = 2; i <= 50; i++) {
   	jw = 0;
   	j = 4999;
   	while (j >= 0) {
   		if (a[i-1][j] != 0) {
   			break;
   		}
   		j--;
   	}
   	len[i-1] = j+1;
   	j = 0;
   	while (j<len[i-1] + 2) {
   		t = a[i - 1][j] * i+jw;
   		jw = t / 10;
   		a[i][j] = t % 10;
   		j++;
   	}
   	if (jw) {
   		t = a[i - 1][j] * i + jw;
   		jw = t / 10;
   		a[i][j] = t % 10;
   	}
   }
   j = 4999;
   while (a[50][j] == 0) {
   	j--;
   }
   len[50] = j;
   scanf("%d", &n);
   temp[0] = 1;
   jw = 0;
   int p;
   for (i = 2; i <= n; i++) {
   	for (j = 0; j <= len[i];j++) {
   		t = temp[j] + a[i][j]+jw;
   		jw = t / 10;
   		temp[j] = t % 10;
   	}
   	while (jw) {
   		t = temp[j] + a[i][j] + jw;
   		jw = t / 10;
   		temp[j] = t % 10;
   		j++;
   	}
   	
   }
   if (n != 1) {
   	p = 5999;

   	while (temp[p] == 0) {
   		p--;
   	}
   	for (int k = p; k >= 0; k--) {
   		cout << (char)(temp[k] + 48);
   	}
   }
   else {
   	cout << 1;
   }
}
2024/7/15 17:31
加载中...