非利克瑞尔数

【问题描述】

利克瑞尔数(Lychrel Number)指的是将该数各数位逆序翻转后形成的新数相加,并将该过程反复迭代后,结果永远无法是一个回文数的自然数。57就是一个非利克瑞尔数:57+75=132, 132+231=363,363是一个回文数。请编写程序,输入一个自然数(非利克瑞尔数),请计算其最终的回文数是多少及每次迭代过程。

注意:假设输入的整数和中间产生的整数都不超过int数据类型的表示范围。

【输入形式】

从标准输入读入一个正整数。

【输出形式】

在标准输出上输出迭代过程和最终的回文数。分行输出每次迭代过程:先输出迭代次数(从1开始计数),后跟英文冒号:,然后是两数相加等于某数的等式,其中的符号都是英文符号,没有空格。在最后一行输出最终得到的回文数。

若输入的整数本身就是回文数,则不输出任何迭代过程,直接输出该回文数。

【样例1输入】

109

【样例1输出】

1:109+901=1010

2:1010+101=1111

1111

【样例1说明】

输入的非利克瑞尔数为109,经过两次迭代可得到回文数:第一次迭代为109和其逆序数901相加得1010,第二次迭代为上次迭代得到的1010加上其逆序数101(注意:高位的0省略)得1111,1111就是最终得到的回文数。

【样例2输入】

909

【样例2输出】

909

【样例2说明】

输入的非利克瑞尔数为909,其本身为回文数,直接输出,没有迭代过程。

【评分标准】该程序要求输出求非利克瑞尔数的回文数的迭代过程。

#include<stdio.h>
int isPalindrome(int num){//panduanhuiwenshu
	int reversed=0,temp=num;
	while(temp>0){
		reversed=reversed*10+temp%10;
		temp/=10;
	}
	return reversed==num;
}
int reverseNum(int num){//fanzhuanzhengshu
	int reversed=0;
	while(num>0){
		reversed=reversed*10+num%10;
		num/=10;
	}
	return reversed;
}
int main()
{
	int n;
	scanf("%d",&n);
	if(isPalindrome(n)){
		printf("%d\n",n);
	}
	else{
		int count=1;
		while(1){
			int reversed=reverseNum(n);
			int sum=n+reversed;
			printf("%d:%d+%d=%d\n",count,n,reversed,sum);
			n=sum;
			if(isPalindrome(sum)){
				printf("%d\n",sum);
				break;
			}
			count++;
		}
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值