Sursa
#include <iostream>
#include <fstream>
using namespace std;
ofstream output;
bool isPoli(int* arr, int length)
{
for(int i=0; i<length/2; i++)
if(arr[i] != arr[length-i-1])
return false;
return true;
}
bool isLishel(int* numArray, int length, int depth)
{
/* IF I REACH DEPTH OF 100 JUST LEAVE IT ...
* ... CAN CHANGE TO ANY DEPTH ... JUST NEED
* TO HAVE VERY FAST CPU
*/
if(++depth == 100)
return false;
int rest = 0;
int *fin = new int[length+1];
for(int i = 0 ; i < length; i ++)
{
fin[i] = (numArray[i]+numArray[length-i-1]+rest)%10;
rest = (numArray[i]+numArray[length-i-1]+rest)/10;
}
int l = length;
if(rest != 0)
{
l++;
fin[length] = rest;
}
if(isPoli(fin, l) || isLishel(fin, l, depth))
{
return true;
}
return false;
}
int main()
{
int num, *arr;
int num2 = 0;
int length = 0;
arr = new int[30];
int *pre = new int[32769];
int idx = 0;
int numberOfNumbers = 0, startIndex, finIndex;
for(int ww = 0; ww< 32769; ww++)
pre[ww] = 0;
ifstream from;
output.open("c29i.out");
from.open("c29i.in");
from >> numberOfNumbers;
cout << "I read " << numberOfNumbers << " pairs of numbers ..." << endl;
system("pause");
cout << "Starting program " << endl;
int gasite = 0;
for(int k=0; k<numberOfNumbers; k++)
{
from >> startIndex;
from >> finIndex;
for(int i=startIndex ; i<finIndex ; i++)
{
if(pre[i] == 2)
{
output << " ~> " << i << endl;
gasite++;
}
else if(pre[i] == 0)
{
num = i;
length = 0;
while(num!= 0)
{
arr[length++] = num%10;
num/=10;
}
if(!isLishel(arr, length, 0))
{
pre[i] = 2;
gasite++;
}
else
{
pre[i] = 1;
}
}
}
output << "Line - " << k << " " << "found between " << startIndex << " and " << finIndex << " : " << gasite <<endl;
gasite = 0;
}
cout << "Complete..." << endl;
return 0;
}output pt 1 -> 30000
"Line 0 found between 1 and 32000 : 1267"
am atasat si un fisier cu informatii mai "detaliate" despre cum arata fiecare numar dupa 100 de iteratii :p
daca vrea careva sa vada cum arata un numar la adancime 2000000000 ... nu are decat ... numa sa schimbe in cod

)
executabilul de mai sus nu este valabil pentru ca am modificat din memset(pre, 0, 32...) in
for(int ww = 0; ww< 32769; ww++)
pre[ww] = 0;... aparent memset-ul imi faulta array-ul
am uitat sa iti trimit sursa , era sa o si pierd ca am instalat W7 si am crezut ca a sters c-ul .. da face windows.old si am regasito

<:-P
[o sa gasesc o problema .. frumoasa

)]