c++ - 为什么它在运行时显示 sigsegv 错误?
问题描述
该代码适用于小输入,但对于较大的输入存在运行时错误。问题来自hackerearth,它就像
给定一个由三个 S={1, 3, 9, 27} 的非负幂组成的集合 S。考虑按其元素之和的值排序的所有非空子集的序列。还给你一个元素 n。您需要在序列中的第 n 个位置找到子集,并按其元素的升序打印它。
#include <iostream>
#include <math.h>
#include <stdio.h>
using namespace std;
#define ll long long
ll poww(ll n,ll p)
{
ll power=1;
for(ll i=0;i<p;i++)
{
power=power*n;
}
return power;
}
int main(){
ll t;
cin>>t;
while(t--){
ll n;
cin>>n;
ll a[n];
for(ll i=0; i<n; i++){
a[i]=poww(3, i);
}
ll idx[n]={0};
ll i=0, count=0;
for(ll j=0; j<n; j++){
if(n & (1<<j)){
count++;
idx[i]=a[j];
i++;
}
}
cout<<count<<endl;
for(ll k=0; k<i; k++){
cout<<idx[k]<<" ";
}
cout<<endl;
}
return 0;
}