计算两个数的回文数
Calculate the two palindrome of number
我有一个小项目,我必须编写一种算法来计算一个数的两个回文。
例如:如果输入为 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;
}
您的代码已包含 num
和 reverse_num
。您所要做的就是在 if else
语句中一个接一个地打印它们。那是 "instant gratification".
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
时跟踪小数位...我们可以轻松 post 这里的代码,但它 很好 和学习 C 的简单练习,如果你自己做,你会得到更多。
当然,还有其他方法可以达到这个结果,正如其他答案和评论所建议的那样。此答案基于您输入的代码。
请注意,a*10^n
或更普遍的 … + 0*10^0
形式的数字可能会导致某些 "surprisingly looking" 回文 ,至少在OP中如何定义它们方面。
给你。
#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
我有一个小项目,我必须编写一种算法来计算一个数的两个回文。 例如:如果输入为 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;
}
您的代码已包含 num
和 reverse_num
。您所要做的就是在 if else
语句中一个接一个地打印它们。那是 "instant gratification".
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
时跟踪小数位...我们可以轻松 post 这里的代码,但它 很好 和学习 C 的简单练习,如果你自己做,你会得到更多。
当然,还有其他方法可以达到这个结果,正如其他答案和评论所建议的那样。此答案基于您输入的代码。
请注意,a*10^n
或更普遍的 … + 0*10^0
形式的数字可能会导致某些 "surprisingly looking" 回文 ,至少在OP中如何定义它们方面。
给你。
#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