我有一个小项目,我必须编写一个计算一个数字的两个回文的算法。 例如:如果输入为367,则结果为367763和763367。
我知道如何检查数字是否是回文。但我必须创建两个回文,它有点不同,我找不到答案。
请在未投票之前,我是编程中的小伙子,正在努力学习,我已经尝试解决问题并搜索了很多。
这是我的代码,用于检查数字是否为回文:
#include <stdio.h>
int main()
{
int num, reverse_num=0, remainder,temp;
printf("Enter an integer: ");
scanf("%d", &num);
temp=num;
while(temp!=0)
{
remainder=temp%10;
reverse_num=reverse_num*10+remainder;
temp/=10;
}
if(reverse_num==num)
printf("%d is a palindrome number",num);
else
printf("%d is not a palindrome number",num);
return 0;
}
答案 0 :(得分:1)
您的代码已同时包含num
和reverse_num
。您所要做的就是在if else
语句中依次打印它们。这就是&#34;即时满足&#34;。
if(reverse_num==num) {
printf("palindrome1 = palindrome2 = %d%d\n", num, num);
}else{
printf("palindrome1 = %d%d\n",num, reverse_num);
printf("palindrome2 = %d%d\n",reverse_num, num);
}
如果你真的想将回文计算为实际的整数,那么它只需要几行代码。在计算reverse_num
时添加一个计数器来跟踪小数位...我们可以在这里轻松发布代码,但它好且简单练习 C ,如果你自己动手,你会得到更多。
当然,还有其他方法可以实现结果,正如其他答案和评论所暗示的那样。这个答案基于您的代码输入。
另请注意,表单a*10^n
或更一般… + 0*10^0
的数量可能会导致一些&#34;令人惊讶地看到&#34; palindromes ,至少在OP中定义它们的方式。
答案 1 :(得分:1)
你在这里。
#include <stdio.h>
struct palindrome_pair
{
unsigned long long int first;
unsigned long long int second;
};
struct palindrome_pair build_palindrome( unsigned int x )
{
const unsigned int Base = 10;
struct palindrome_pair palindrome = { x, 1 };
unsigned int y = 0;
for ( unsigned int value = x; value != 0; value /= Base )
{
y = Base * y + value % Base;
palindrome.first *= Base;
palindrome.second *= Base;
}
palindrome.first += y;
palindrome.second = palindrome.second * y + x;
return palindrome;
}
int main( void )
{
unsigned int x = 367u;
struct palindrome_pair palindrome = build_palindrome( x );
printf( "%u:\t%llu\t%llu\n\n", x, palindrome.first, palindrome.second );
const unsigned int N = 20;
for ( unsigned int i = 0; i <= N; i++ )
{
palindrome = build_palindrome( i );
printf( "%u:\t%llu\t%llu\n", i, palindrome.first, palindrome.second );
}
return 0;
}
程序输出
367: 367763 763367
0: 0 0
1: 11 11
2: 22 22
3: 33 33
4: 44 44
5: 55 55
6: 66 66
7: 77 77
8: 88 88
9: 99 99
10: 1001 110
11: 1111 1111
12: 1221 2112
13: 1331 3113
14: 1441 4114
15: 1551 5115
16: 1661 6116
17: 1771 7117
18: 1881 8118
19: 1991 9119
20: 2002 220