#include <conio.h>
#include <stdio.h>
#include <string.h>
bool GetIsPalindrom(char *pStr, int StartIndex, int EndIndex)
{
if ( StartIndex >= EndIndex )
return true;
if ( pStr[StartIndex] == pStr[EndIndex] )
return GetIsPalindrom(pStr, StartIndex + 1, EndIndex - 1);
return false;
}
void main()
{
clrscr();
printf("Enter Value: ");
char sBuf[200];
scanf("%s", sBuf);
bool bPalindrom = GetIsPalindrom(sBuf, 0, strlen(sBuf) - 1);
printf("Value: %s is %s", sBuf, bPalindrom? "palindrom" : "not palindrom");
getch();
}
Определить явл. ли число палиндромом (рекурсия) С++
Нужно определить явл. введенное число палиндромом при помощи рекурсивной функции. Был бы очень рад помощи!
Но очень желательно без использования массива.
Цитата: Nickolai
Но очень желательно без использования массива.
Это не совсем массив. Это строковое представление числа.
Этот пример универсален, благодаря использованию строки в виде массива char'ов. Вечером напишу вариант чисто для чисел, если кто-то не опередит :)
Было бы замечательно. Буду с нетерпением ждатЬ!
Код:
#include <conio.h>
#include <stdio.h>
#include <math.h>
bool GetIsPalindrom(long Value, int StartIndex, int EndIndex, int DigCount)
{
if ( StartIndex >= EndIndex )
return true;
int FirstDig = (int)(Value / pow(10, DigCount - StartIndex)) % 10,
SecondDig = (int)(Value / pow(10, DigCount - EndIndex )) % 10;
if ( FirstDig == SecondDig )
return GetIsPalindrom(Value, StartIndex + 1, EndIndex - 1, DigCount);
return false;
}
void main()
{
clrscr();
printf("Enter Value: ");
long iValue;
scanf("%i", &iValue);
int DigCount = 1;
while ( iValue / pow(10, DigCount) > 1 )
DigCount++;
bool bPalindrom = GetIsPalindrom(iValue, 1, DigCount, DigCount);
printf("Value: %i is %s", iValue, bPalindrom? "palindrom" : "not palindrom");
getch();
}
#include <stdio.h>
#include <math.h>
bool GetIsPalindrom(long Value, int StartIndex, int EndIndex, int DigCount)
{
if ( StartIndex >= EndIndex )
return true;
int FirstDig = (int)(Value / pow(10, DigCount - StartIndex)) % 10,
SecondDig = (int)(Value / pow(10, DigCount - EndIndex )) % 10;
if ( FirstDig == SecondDig )
return GetIsPalindrom(Value, StartIndex + 1, EndIndex - 1, DigCount);
return false;
}
void main()
{
clrscr();
printf("Enter Value: ");
long iValue;
scanf("%i", &iValue);
int DigCount = 1;
while ( iValue / pow(10, DigCount) > 1 )
DigCount++;
bool bPalindrom = GetIsPalindrom(iValue, 1, DigCount, DigCount);
printf("Value: %i is %s", iValue, bPalindrom? "palindrom" : "not palindrom");
getch();
}
Спасибо огромное!