Решил одну задачку из книги Дейтелов:
spoilerПалиндромом называется число или фраза текста, которая читается одинаково как слева направо, так и в обратном порядке. Например, каждое из следующих пятизначных целых чисел является палиндромом: 12321, 55555, 45554 и 11611. Напишите программу, которая считывает пятизначное целое число и определяет, является ли оно палиндромом. (Подсказка: примените операции деления и взятия по модулю для разложения числа на отдельные цифры.)
И всё работает, однако есть нюанс, мне как новичку сложно понять в чем именно проблема, то есть понятно что в алгоритме, но вот где именно?
Собственно код:
spoiler/*Program that reads in a five-digit integer and determines whether or not it’s a palindrome.*/
/*Created by kacToHbI4*/
#include <stdio.h>
int main(void)
{
int a,
num1 = 10000, num2 = 1000, num3 = 100, num4 = 10, num5 = 1,
num2_1, num3_1, num4_1, num5_1,
result1, result2, result3, result4, result5;
printf("Enter a five-digit number: ");
scanf("%d", &a);
/*****Block for separates the number into its individual digits.*****/
/********************************************************************/
result1 = a / num1;
num2_1 = a % num1;
result2 = num2_1 / num2;
num3_1 = num2_1 % num2;
result3 = num3_1 / num3;
num4_1 = num3_1 % num3;
result4 = num4_1 / num4;
num5_1 = num4_1 % num4;
result5 = num5_1 / num5;
/*****This block determines whether or not it’s a palindrome.*****/
/*****************************************************************/
if(result1 == result5)
{
if(result2 == result4)
printf("It's a palindrome.\n");
}
else printf("This is not palindrome.\n");
return 0;
}
Все числа обрабатываются нормально, кроме ситуации с тремя нулями, причем ситуации когда либо один 0 в начале и два в конце, либо когда наоборот два 0 в начале и один в конце, ниже пример моих тестов:
spoiler~/workspace/chapter3/ $ gcc 3.35.c -o 3.35.exe
~/workspace/chapter3/ $ ./3.35.exe
Enter a five-digit number: 01200
~/workspace/chapter3/ $ ./3.35.exe
Enter a five-digit number: 00120
~/workspace/chapter3/ $ ./3.35.exe
Enter a five-digit number: 01300
~/workspace/chapter3/ $ ./3.35.exe
Enter a five-digit number: 012345
This is not palindrome.
~/workspace/chapter3/ $ ./3.35.exe
Enter a five-digit number: 01210
It's a palindrome.
~/workspace/chapter3/ $ ./3.35.exe
Enter a five-digit number: 00200
It's a palindrome.
~/workspace/chapter3/ $ ./3.35.exe
Enter a five-digit number: 01200
~/workspace/chapter3/ $ ./3.35.exe
Enter a five-digit number: 01100
~/workspace/chapter3/ $ ./3.35.exe
Enter a five-digit number: 00110
~/workspace/chapter3/ $ ./3.35.exe
Enter a five-digit number: 00011
This is not palindrome.
~/workspace/chapter3/ $ ./3.35.exe
Enter a five-digit number: 09900
~/workspace/chapter3/ $ ./3.35.exe
Enter a five-digit number: 00990
~/workspace/chapter3/ $
Этот же алгоритм, но в другой задаче работает прекрасно с любой комбинацией цифр, ну естественно я не смог протестировать все 10000 комбинаций.
Задача:
spoilerНапишите программу, которая считывает число из пяти цифр, разделяет это число на отдельные цифры и выводит эти цифры на печать, отделяя одну от другой тремя пробелами. Например, если пользователь ввел число 42339, программа должна напечатать.
4 2 3 3 9
Мой код:
spoiler#include <stdio.h>
int main(void)
{
int a, num1 = 10000, num2 = 1000, num3 = 100, num4 = 10, num5 = 1,
result1, result2, result3, result4, result5,
num2_1, num3_1, num4_1, num5_1;
printf("Enter a five digit number: ");
scanf("%d", &a);
result1 = a / num1;
num2_1 = a % num1;
result2 = num2_1 / num2;
num3_1 = num2_1 % num2;
result3 = num3_1 / num3;
num4_1 = num3_1 % num3;
result4 = num4_1 / num4;
num5_1 = num4_1 % num4;
result5 = num5_1 / num5;
printf("%d\t%d\t%d\t%d\t%d\t\n", result1, result2, result3, result4, result5);
return 0;
}
Тесты:
spoiler~/workspace/chapter2/ $ ./2.30.exe
Enter a five digit number: 12342
1 2 3 4 2
~/workspace/chapter2/ $ ./2.30.exe
Enter a five digit number: 00001
0 0 0 0 1
~/workspace/chapter2/ $ ./2.30.exe
Enter a five digit number: 00012
0 0 0 1 2
~/workspace/chapter2/ $ ./2.30.exe
Enter a five digit number: 00120
0 0 1 2 0
~/workspace/chapter2/ $ ./2.30.exe
Enter a five digit number: 00000
0 0 0 0 0
~/workspace/chapter2/ $ ./2.30.exe
Enter a five digit number: 98756
9 8 7 5 6
~/workspace/chapter2/ $ ./2.30.exe
Enter a five digit number: 01350
0 1 3 5 0
И есть дальше задача где я хотел применить подобный алгоритм, но если в нем ошибка, то и задачу решать надо после исправления алгоритма.
Пытаюсь разобраться сам, но видимо маловато опыта =(