在PALIN的spoj上的c代码中运行时错误SIGSEGV

时间:2014-10-22 06:44:18

标签: c palindrome

如果从左到右和从右到左读取十进制系统中的表示相同,则正整数称为回文。对于给定的正整数K不超过1000000位,写入大于K的最小回文值输出。始终显示数字而不带前导零。 首先我试图保存所有的回文,然后检查打印号码。

#include<stdio.h>
int array[2000],index=0;
long long n;

void savepalindrome()
{
    long long lim=1000000;
    long long i=1;

    for(i=1;i<lim;i++)
    {
        if(checkpalindrome(i)==1) {
            array[index]=i; index++;
        }
    }
}

int  checkpalindrome(long long i) {
    long long reverse=0, rem,temp;
    temp=i;
    while(temp!=0)
    {
        rem=temp%10;
        reverse=reverse*10+rem;
        temp/=10;
    }
    if(reverse==i) return 1;
    else return 0;
}

int main() {
    int t;
    scanf("%d",&t);
    savepalindrome();
    while(t--) {
        scanf("%d",&n);
        index=0;
        while(array[index]<=n) {
            index++;
        }

        if(index<=1998) printf("%d\n",array[index]);
    }
}

1 个答案:

答案 0 :(得分:0)

虽然如果long long int不能存储1000000位数,它将在long long int的范围内溢出。我认为你的索引超出数组bound.it似乎只是SIGSEGV的原因。仅当SIGSEGV访问无效的内存位置时,才会将其发送到进程。