为什么这段代码不起作用?输出未打印

时间:2017-05-19 12:11:05

标签: c++14

当我在devc ++编译器中编译时,不打印输出。有任何逻辑错误吗?该程序应接受用户编号,打印最大回文大于给定数字。

这是SPOJ PALIN的问题

包括

使用namespace std;

int main()  {

int t;

cin>>t;
cout<<endl;

while(t--)
{long long int i;
long long int k;
int flag=1;
long long int n;
int a[10000000];
    cin>>n;
    n++;
    start:
    i=0;
    while(n!=0)
    {
        a[i]=n%10;
    i++;
    n=n/10;}
    i--;
    k=i;
    for(int j=0;j<=k;j++)
{   
    if(a[i]!=a[j])
    {flag=0;break;}
    else
    i--;
}
if(flag==1)
cout<<n<<endl;
else
{n++;goto start;}

}
    return 0;

}

1 个答案:

答案 0 :(得分:0)

您尚未初始化标志变量。如果(a [i] == a [j])那么该标志将保持未初始化并且可能在检查if条件时产生问题,除非默认值为0(我不确定它是否会)。我还可以看到,根据你的代码,flag的值永远不会变为1。

#include<iostream>
using namespace::std;
int main()
{
    int t;
    cin>>t;
    cout<<endl;
    while(t--)
    {
        long int i, k, n;  int a[1000];  int flag = 1, duplicaten;
        cin>>n;
        n++;

        start:
        //cout<<"inside start : n = "<<n<<"\n";
        flag=1; i=0;
        duplicaten=n;
        while(n!=0)
        {
            a[i]=n%10;
            i++;
            n=n/10;
        }
        n=duplicaten;
        i--;
        k=i;
        //cout<<"number of digits of n = "<<i+1<<"\n";
        for(int j=0;j<=k;j++)
        {
            if(a[i]!=a[j])
            {
                flag=0;
                break;
            }
            else
            i--;
        }
        //cout<<"flag = "<<flag<<endl;
        if(flag==1)
        {
            //cout<<"FOUND!!\n";
            cout<<n<<endl;
        }
        else
        {
            n++;
            //cout<<"NOT found\n";
            goto start;
        }
    }
    return 0;
}

您可以自行更改数据类型的大小,并至少对此答案进行投票。 < Output before using duplicaten : link to image >