如何定义不定长度的数组

定义了数值a用来储存每位数字,但因输入的数字不确定,数组a的长度就不确定了
再请问代码哪里写错了,怎么答案不对啊

 

img

应该是因为判断数字是否为完全平方数又至少有两个数字相同的判断分支else错了,把这个esle分支的return 0放到函数结尾即可,因为是需要判断数组里的每个元素,所以需要让整个双层for循环遍历完所有数组元素才能判断是否需要返回0,即此数不满足条件要等循环完成才能判断,修改如下:

#include <stdio.h>
#include <math.h>

int isTheNumber(const int N);

int main(void){
    
    int n1,n2,i,cnt;
    
    scanf("%d %d",&n1,&n2);
    
    cnt = 0;
    for(i=n1;i<=n2;i++){
        if(isTheNumber(i))
            cnt++;
    }
    
    printf("cnt= %d\n",cnt);
    
    return 0;
}

int isTheNumber(const int N){
    
    int n=N;
    int i=0;
    int a[10];
    int x=(int)sqrt(N);
    while (n>=10){
        a[i]=n%10;
        n=n/10;
        i++;
    }    
    a[i]=n;
    
    
//    FILE * fp = fopen("perfectNumber.txt","a+");
//    fprintf(fp,"数组a的元素逆序打印为:");
//
//    for(int j=i;j>=0;j--){
//        fprintf(fp,"%d ",a[j]);
//    //    printf("%d",a[j]);
//    }
////    printf(" ");
//    fprintf(fp,"\n");
//    fclose(fp);
    
//    if(x*x==N){
//        printf("perfectNumber=%d\n",N); 
//    }
    
    for(int b=0;b<i;b++){
        for(int c=b+1;c<=i;c++){
            if(a[b]==a[c]&&x*x==N){
                //printf("N=%d\n",N);
                return 1;
            }
        }
    }
    
    return 0;
}

img

如果是C++(也就是后缀名为cpp)你这个a可以直接 int a[n] = {0}; 这样子定义。如果不是的话你就把a设大点就好了