首页 > 解决方案 > 为什么它在运行时显示 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;
}

标签: c++segmentation-faultruntime-error

解决方案


推荐阅读