回文数的形成 C语言

前言

也是论坛回答的题,对方发了题就没有声响了,额,所有我就写了篇博文,免得还需要小伙伴们发帖子。

问题引入

任取一个十进制整数,将其倒过来后与原来的整数相加,得到一个新的整数后重复以上步骤,则最终可得到一个回文数。请编程验证。(回文数就是将一个数从左向右读是一样的,如121,11等)。(注:回文数不超过2147483647——》int型的范围)
回文数的这一形成规则目前还属于一个猜想,尚未获得数学上的验证,有些回文数要经历上百个步骤才能获得,请编程验证,打印形成过程。如输入整数78,则形成回文数的过程为:78+87=165,165+561=726,726+627=1353,1353+3531=4884。

问题分析

1.什么是回文?
也就是古时候看和现在看都是一个数(左看右看都是一个数),左右对称,例如4884 1221 123321.

2.怎么确定形成过程结束?
最后形成了回文数,则结束,所有在程序中需要一个判断一个数是不是回文数,然后还需要一个求输入数据的反序数(45的反序数是54)。

3.代码流程
c语言是一门面向对象的语言,所有过程很重要。
首先肯定是用户输入一个数,然后判断其是否是回文数,如果是就没必要继续下去了。如果不是就求其反序数,判断其是否是反序数,不是就打印其过程,求和,然后以和作为原始基数去求反序数,然后判断其是否是回文数(这里也可以求原数),一直到是,然后打印一下成功。

代码及其注释

#include<stdio.h>
/*
	int palindromic(int x):求一个数@x的反序数
	@x:目标数
	返回值为目标数的反序数
*/
int palindromic(int x)
{
	int i=0;
	while(x)
	{
		i=i*10+x%10;//将@x的低位不断向上移
		x=x/10;//取@x的低位
	}
	return i;
}
/*
	int judge(int x):判断@x是否是一个回文数
	返回1表示是
	返回0表示不是
*/
int judge(int x)
{
	if(x==palindromic(x))
	{
		return 1;
	}
	else
	{
		return 0;
	}
}
int main()
{
	int x1,x2,key;
	scanf("%d",&x1);//输入起始数值
	if(!judge(x2))
	{
		printf("yes palindromic\n");//是回文表示形成过程结束
		return 0;
	}
	while(1)
	{	
		x2=palindromic(x1);//获取其反序数
		key=judge(x2);
		if(key==0)//不是回文,则打印过程
		{
			printf("%d+%d=%d\n",x1,x2,x1+x2);
			x1+=x2;
		}
		else
		{
			printf("yes palindromic\n");//是回文表示形成过程结束
			break;
		}
	}
    return 0;
}


结果图

运行环境:gcc
编辑环境:sources insight
在这里插入图片描述

结语

如果有什么疑问或者其他,欢迎私信,谢谢!

猜你喜欢

转载自blog.csdn.net/qq_44885018/article/details/103636463