here is question link :-
my solution link(partially accepted):-
https://www.codechef.com/viewsolution/28587596
i need a better answer and if you can please tell me in which case is it failing it will be just amazing.
here is the code:-
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int main()
{
long int k;
cin>>k;
while(k--)
{
unsigned long long int n;
cin>>n;
if(n<10)
{
if(n!=0)
{
cout<<"true"<<endl;
}
else
{
cout<<"false"<<endl;
//cout<<" # #";
}
}
else
{
long long int q=1,f=0,c=0,t1,t2;
t1=n;
t2=n;
while(q)
{
q=t2%10;
t2=t2/10;
if(q==0&&t2!=0)
{
f=1;
break;
}
c++;
if(t2==0)
{
break;
}
}
if(f==1)
{
cout<<"false"<<endl;
}
else
{
if(c%2==0)
{
long long int A[(c/2)-1],B[(c/2)-1],i=0,j,q2,flag1=0;
while(i<c)
{
q2=t1%10;
t1=t1/10;
if(i>=(c/2))
{
B[i-((c/2))]=q2;
i++;
}
else
{
A[i]=q2;
i++;
}
}
for(i=0;i<c/2;++i)
{
if(A[i]==1&&B[((c/2)-1)-i]!=1)
{
flag1=1;
break;
}
if(A[i]==2&&B[((c/2)-1)-i]!=7)
{
flag1=1;
break;
}
if(A[i]==3&&B[((c/2)-1)-i]!=8)
{
flag1=1;
break;
}
if(A[i]==4&&B[((c/2)-1)-i]!=5)
{
flag1=1;
break;
}
if(A[i]==5&&B[((c/2)-1)-i]!=4)
{
flag1=1;
break;
}
if(A[i]==6&&B[((c/2)-1)-i]!=9)
{
flag1=1;
break;
}
if(A[i]==7&&B[((c/2)-1)-i]!=2)
{
flag1=1;
break;
}
if(A[i]==8&&B[((c/2)-1)-i]!=3)
{
flag1=1;
break;
}
if(A[i]==9&&B[((c/2)-1)-i]!=6)
{
flag1=1;
break;
}
}
if(flag1==0)
{
cout<<"true"<<endl;
}
else
{
cout<<"false"<<endl;
}
}
else
{
long long int A[(c-1)/2],B[(c-1)/2],i=0,j,q2,flag1=0;
while(i<c)
{
if(i>(c/2))
{
q2=t1%10;
t1=t1/10;
B[i-((c/2)+1)]=q2;
i++;
}
else if(i<(c/2))
{
q2=t1%10;
t1=t1/10;
A[i]=q2;
i++;
}
if(i==(c/2))
{
q2=t1%10;
t1=t1/10;
i++;
}
}
for(i=0;i<=((c-1)/2)-1;++i)
{
if(A[i]==1&&B[(((c-1)/2)-1)-i]!=1)
{
flag1=1;
break;
}
if(A[i]==2&&B[(((c-1)/2)-1)-i]!=7)
{
flag1=1;
break;
}
if(A[i]==3&&B[(((c-1)/2)-1)-i]!=8)
{
flag1=1;
break;
}
if(A[i]==4&&B[(((c-1)/2)-1)-i]!=5)
{
flag1=1;
break;
}
if(A[i]==5&&B[(((c-1)/2)-1)-i]!=4)
{
flag1=1;
break;
}
if(A[i]==6&&B[(((c-1)/2)-1)-i]!=9)
{
flag1=1;
break;
}
if(A[i]==7&&B[(((c-1)/2)-1)-i]!=2)
{
flag1=1;
break;
}
if(A[i]==8&&B[(((c-1)/2)-1)-i]!=3)
{
flag1=1;
break;
}
if(A[i]==9&&B[(((c-1)/2)-1)-i]!=6)
{
flag1=1;
break;
}
}
if(flag1==0)
{
cout<<"true"<<endl;
}
else
{
cout<<"false"<<endl;
}
}
}
}
}
return 0;
}