实验2 顺序表的应用(回文数猜想)

 

问题描述:

任取一个正整数,如果不是回文数,将该数与它的倒序相加,若其和不是回文数,则重复上述步骤,一直到获得回文数为止。

例如:将68变为154(68+86),再变成605(154+451),最后变成1111(605+506),而1111是回文数。

于是有科学家提出一个猜想:不论开始时什么正整数,在经过有限次正序数和倒序数相加的步骤后,都会得到一个回文数。

请你编程验证。

要求:

使用顺序表存储运算过程中产生的正整数,最后对所有数据进行显示。

#include<stdio.h>

typedef long DATA_TYPE;

typedef unsigned char boolean;
#define TRUE  1
#define FALSE 0

#define MAXSIZE   100

typedef struct SQ_LIST{
	DATA_TYPE  data[MAXSIZE];
	int count;
}LIST;


void initList(LIST *head);
void appendListElement(LIST *head, DATA_TYPE value);
void showList(LIST list);
DATA_TYPE reverse(DATA_TYPE x);
boolean isPalindrome(DATA_TYPE x);

boolean isPalindrome(DATA_TYPE x){
	DATA_TYPE y;

	y = reverse(x);

	if(y == x){
		return TRUE;
	}else{
		return FALSE;
	}
}

DATA_TYPE reverse(DATA_TYPE x){
	DATA_TYPE y = 0;
	DATA_TYPE tmp = x;

	while(tmp){
		y = tmp%10 + y*10;
		tmp/=10;
	}
	return y;
}

void showList(LIST list){
	int i;
	
	printf("当前顺序表中的元素为:");
	for(i = 0; i < list.count; i++){
		printf("%d ", list.data[i]);
	}
	printf("\n");
}

void appendListElement(LIST *head, DATA_TYPE value){
	head->data[head->count++] = value;
}

void initList(LIST *head){
	head->count = 0;
}

void main(void){
	LIST list;
	DATA_TYPE x = 55;
	DATA_TYPE y;

	initList(&list);

	printf("请输入一个正整数:");
	scanf("%d", &x);
	appendListElement(&list, x);

	if(isPalindrome(x)){
		appendListElement(&list, x);

	}else{
		y = x + reverse(x);
		appendListElement(&list, y);

		if(isPalindrome(y))
			
		while(!isPalindrome(y)){
			y = y + reverse(y);
			appendListElement(&list, y);
		}
	}
	showList(list);

}

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安安csdn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值