/* Задача #3.35 */
#include <stdio.h>
int main(void) {
int a, b, c, d, e, x, y;
printf("Введите пятизначное число для определения палиндром оно или нет: ");
scanf("%d", &x);
a = x % 10000;
b = x % 1000;
c = x % 100;
d = x % 10;
e = x - a;
a -= b;
b -= c;
c -= d;
y = d * 10000 + c * 100 + b * 1 + a / 100 + e / 10000;
if(x == y)
printf("Введённое вами число является палиндромом!\n");
else
printf("Введённое вами число не палиндром!\n");
return 0;
}
Полиндром (язык С)
Код:
У кого есть свои варианты?
[COLOR=red]для каждой задачи создавай пожалуйста новую тему. читай правила форума . (Moderator)[/COLOR]
[COLOR=#ff0000][/COLOR]
Код:
/* Задача #3.35 */
#include <stdio.h>
int main(void) {
int a, b, c, d, e, x;
printf("Введите пятизначное число для проверки полиндром оно или нет: ");
scanf("%d", &x);
a = x / 10000;
b = (x / 1000) % 10;
c = (x / 100) % 10;
d = (x / 10) % 10;
e = x % 10;
if(a == e && b == d)
printf("Введённое вами число палиндром.\n\n");
else
printf("Введённое вами число не палиндром.\n\n");
}
#include <stdio.h>
int main(void) {
int a, b, c, d, e, x;
printf("Введите пятизначное число для проверки полиндром оно или нет: ");
scanf("%d", &x);
a = x / 10000;
b = (x / 1000) % 10;
c = (x / 100) % 10;
d = (x / 10) % 10;
e = x % 10;
if(a == e && b == d)
printf("Введённое вами число палиндром.\n\n");
else
printf("Введённое вами число не палиндром.\n\n");
}
Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int isPolindrome(int num)
{
char str[11];
int i, j;
itoa(num, str, 10); //переводим число в массив символов
for(i = 0, j = strlen(str)-1; i < j; i++, j--)
if(str != str[j]) return 0; // num isn't polindrome
return 1; // num is polindrome
}
int main(void)
{
int n;
printf("Enter a number: ");
scanf("%d", &n);
if( isPolindrome(n) )
printf("Number %d is polindrome\n\n", n);
else
printf("Number %d isn't polindrome\n\n", n);
return 0;
}
#include <stdlib.h>
#include <string.h>
int isPolindrome(int num)
{
char str[11];
int i, j;
itoa(num, str, 10); //переводим число в массив символов
for(i = 0, j = strlen(str)-1; i < j; i++, j--)
if(str != str[j]) return 0; // num isn't polindrome
return 1; // num is polindrome
}
int main(void)
{
int n;
printf("Enter a number: ");
scanf("%d", &n);
if( isPolindrome(n) )
printf("Number %d is polindrome\n\n", n);
else
printf("Number %d isn't polindrome\n\n", n);
return 0;
}
Код:
#include <stdio.h>
int main(void)
{
int x;
printf("Введите пятизначное число для определения палиндром оно или нет: ");
scanf("%d", &x);
if((x%10)*10+(x%100)/10 == x/1000)
printf("Введённое вами число является палиндромом!\n");
else
printf("Введённое вами число не палиндром!\n");
return 0;
}
int main(void)
{
int x;
printf("Введите пятизначное число для определения палиндром оно или нет: ");
scanf("%d", &x);
if((x%10)*10+(x%100)/10 == x/1000)
printf("Введённое вами число является палиндромом!\n");
else
printf("Введённое вами число не палиндром!\n");
return 0;
}
OlgaKr я к сожалению до масивов пока не дошёл :( но всё равно спасибо!
Цитата: Мerlin
Код:
#include <stdio.h>
int main(void)
{
int x;
printf("Введите пятизначное число для определения палиндром оно или нет: ");
scanf("%d", &x);
if((x%10)*10+(x%100)/10 == x/1000)
printf("Введённое вами число является палиндромом!\n");
else
printf("Введённое вами число не палиндром!\n");
return 0;
}
int main(void)
{
int x;
printf("Введите пятизначное число для определения палиндром оно или нет: ");
scanf("%d", &x);
if((x%10)*10+(x%100)/10 == x/1000)
printf("Введённое вами число является палиндромом!\n");
else
printf("Введённое вами число не палиндром!\n");
return 0;
}
При всем уважении к Мerlin я не понимаю как эта программа определит палендром
2like-nix смотри:
(x%10) -- последняя цифра числа
(x%100)/10 -- предпоследняя цифра числа
(x%10)*10+(x%100)/10 -- число состоящее из двух последних цифр исходного числа, только если их поменять местами (т.е. для числа 12345 результатом этого выражения будет 54)
x/100 -- число, состоящее из первых двух цифр исходного числа (12 в предыдущем примере)
третья цифра никого не интересует, ибо она никуда не двигается при зеркальном отображении числа.
остается только сравнить перевернутые последние дву цифры с первыми двумя
в теории должно работать :)
2like-nix смотри:
(x%10) -- последняя цифра числа
(x%100)/10 -- предпоследняя цифра числа
(x%10)*10+(x%100)/10 -- число состоящее из двух последних цифр исходного числа, только если их поменять местами (т.е. для числа 12345 результатом этого выражения будет 54)
x/100 -- число, состоящее из первых двух цифр исходного числа (12 в предыдущем примере)
третья цифра никого не интересует, ибо она никуда не двигается при зеркальном отображении числа.
остается только сравнить перевернутые последние дву цифры с первыми двумя
в теории должно работать :)[/QUOTE]
а довольно забавный вариант, хотя и не очень читабельный. и подходит ТОЛЬКО для пятизначных чисел
Это я понял
И OlgaKr 15 символов больше чем int
вот рабочий вариант
Код:
#include <stdio.h>
#include <string.h>
main(){
int i;
def:
printf("Enter a number: ");
char str[16];
scanf("%s", str);
for (i=0;i<strlen(str);i++) if(str<49 || str>57) goto def;
if (strlen(str)==1) printf("true");
for (i=0; i<(strlen(str)/2);i++) {
if (str==str[strlen(str)-(i+1)]){
if(i==((strlen(str)/2)-1)) printf("true");
} else {
printf("false"); break;
}
};
}
#include <string.h>
main(){
int i;
def:
printf("Enter a number: ");
char str[16];
scanf("%s", str);
for (i=0;i<strlen(str);i++) if(str<49 || str>57) goto def;
if (strlen(str)==1) printf("true");
for (i=0; i<(strlen(str)/2);i++) {
if (str==str[strlen(str)-(i+1)]){
if(i==((strlen(str)/2)-1)) printf("true");
} else {
printf("false"); break;
}
};
}
[COLOR="Red"]Форматируй код по правилам.[/COLOR]Модератор.
Прошу прощения неправильно прочитал название темы там надо было определить 5-и значное а не 15-и))))
Я так понимаю, число - натуральное, достаточно проверить принадлежность всех символов к множеству {0...9}.
Так и введем строку, или массив символов, и сравним каждый символ с соответствующим символом с конца.
Алгоритм работает, практически, для произвольных чисел.
Проверку на {0...9} можно произвести вместе со сравнением.
Цитата: cheburator
А не проще ли вводить просто символы вместо числа.
Я так понимаю, число - натуральное, достаточно проверить принадлежность всех символов к множеству {0...9}.
Так и введем строку, или массив символов, и сравним каждый символ с соответствующим символом с конца.
Алгоритм работает, практически, для произвольных чисел.
Проверку на {0...9} можно произвести вместе со сравнением.
Я так понимаю, число - натуральное, достаточно проверить принадлежность всех символов к множеству {0...9}.
Так и введем строку, или массив символов, и сравним каждый символ с соответствующим символом с конца.
Алгоритм работает, практически, для произвольных чисел.
Проверку на {0...9} можно произвести вместе со сравнением.
Прочти пост OlgaKr.
Вариант Мerlin может и рабочий, но, ИМХО, извращение.. хоть и оригинально ;)
Код:
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
void main()
{
char str1[11];
char str2[11];
int num;
printf("Input number: ");
scanf("%d", &num);
strcpy(str2,itoa(num, str1, 10));
printf("number %d %s polindrome\n",num, (strcmp(str2,strrev(str1)))? "isn't": "is");
}
#include <stdio.h>
#include <stdlib.h>
void main()
{
char str1[11];
char str2[11];
int num;
printf("Input number: ");
scanf("%d", &num);
strcpy(str2,itoa(num, str1, 10));
printf("number %d %s polindrome\n",num, (strcmp(str2,strrev(str1)))? "isn't": "is");
}
Код:
#include <string>
#include <iostream>
using namespace std;
void main ()
{
try
{
string s;
cout << "Enter number: ";
cin >> s;
const size_t slen = s.size();
for (size_t i = 0; i < slen/2; ++i)
{
if (s < '0' || s > '9')
throw exception ("Not a number");
if (s != s[slen-i-1])
{
cout << "Not polindrome";
return;
};
};
if (slen % 2 == 1 && (s[slen/2] < '0' || s[slen/2] > '9'))
throw exception ("Not a number");
cout << "Polindrome";
}
catch (exception &ex)
{
cerr << ex.what() << endl;
}
};
#include <iostream>
using namespace std;
void main ()
{
try
{
string s;
cout << "Enter number: ";
cin >> s;
const size_t slen = s.size();
for (size_t i = 0; i < slen/2; ++i)
{
if (s < '0' || s > '9')
throw exception ("Not a number");
if (s != s[slen-i-1])
{
cout << "Not polindrome";
return;
};
};
if (slen % 2 == 1 && (s[slen/2] < '0' || s[slen/2] > '9'))
throw exception ("Not a number");
cout << "Polindrome";
}
catch (exception &ex)
{
cerr << ex.what() << endl;
}
};
Код:
#include <iostream>
using namespace std;
int main()
{
int a, x, y;
int sum = 0;
cout << "Введите число: ";
cin >> x;
y = x;
if (x > 10) {
while (x > 0) {
a = x % 10;
sum = sum * 10 + a;
x = x / 10;
}
}
if(y == sum)
cout << "Введённое вами число палиндром.\n";
else
cout << "Введённое вами число не палиндром. " << y << " != " << sum << endl;
return 0;
}
using namespace std;
int main()
{
int a, x, y;
int sum = 0;
cout << "Введите число: ";
cin >> x;
y = x;
if (x > 10) {
while (x > 0) {
a = x % 10;
sum = sum * 10 + a;
x = x / 10;
}
}
if(y == sum)
cout << "Введённое вами число палиндром.\n";
else
cout << "Введённое вами число не палиндром. " << y << " != " << sum << endl;
return 0;
}
Цитата: lioncub
Вот состряпал... для любого числа:
Зачем придумывать что-то новое, когда cheburator предложил отличный вариант проверки. Только непонятно зачем нужны точки с запятой после блока if и for, не скомпилится же
И ещё:а вы пробовали глядеть на дату последнего поста?