0%

构造回文数

收集自他人提问

回文数是一种很有趣的数,对于一个不是回文数的数,我们可以通过以下操作来将其变成回文数:
将数反转,加到原数上,重复这个过程,直到得到回文数为止

输入格式

输入1个数位不超过1000的正整数

输出格式

对每一个输入,输出将具变成回文数的过程。每一行按以下个数输出:
A + B = C
A是原数,B是反转数,C是和,重复这个过程,直到C是回文数为止。在最后一行输出C is a palindromic number.
为了控制循环次数,我们规定,如果经过10次操作,还得不到回文数,那么停止,显示Not found in 10 iterations.

样例

输入样例1

在这里给出一组输入。例如:

1
1234

输出样例1

在这里给出相应的输出。例如:

1
2
1234 + 4321 = 5555
5555 is a palindromic number

输入样例2

1
1239102349120349

输出样例2

1
2
3
4
5
6
7
8
9
10
11
1239102349120349 + 9430219432019321 = 10669321781139670
10669321781139670 + 07693118712396601 = 18362440493536271
18362440493536271 + 17263539404426381 = 35625979897962652
35625979897962652 + 25626979897952653 = 61252959795915305
61252959795915305 + 50351959795925216 = 111604919591840521
111604919591840521 + 125048195919406111 = 236653115511246632
236653115511246632 + 236642115511356632 = 473295231022603264
473295231022603264 + 462306220132592374 = 935601451155195638
935601451155195638 + 836591551154106539 = 1772193002309302177
1772193002309302177 + 7712039032003912771 = 9484232034313214948
Not found in 10 iterations.

思路

根据输入的格式,不能使用整数来存储输入值,此处采用字符数组存储,将数字直接看作字符串处理,编写对字符串的反转和求和函数,循环十次并判定和是否为回数。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <stdio.h>
#include <string.h>
#define MAX_COUNT 1050

char num[MAX_COUNT]={0};
char rev[MAX_COUNT]={0};

void reverse(char *src,char *dst,int c){
for(int i=0,j=c-1;i<c;i++,j--){
dst[j]=src[i];
}
}
void add(char *a,char *b,int c){
int flag=0,num1,num2,sum;
for(int i=c-1;i>=0;i--){
num1=a[i]-'0';
num2=b[i]-'0';
sum=num1+num2+(flag?1:0);
if(sum>9){
sum-=10;
flag=1;
}else{
flag=0;
}
a[i]=sum+'0';
}
if(flag){
for(int i=c;i>0;i--){
num[i]=num[i-1];
}
num[0]='1';
}
}
int isCorrect(char *num,int c){
int l=0,r=c-1;
while(l<r){
if(num[l]!=num[r]) return 0;
l++;
r--;
}
return 1;
}
int main() {
scanf("%s",num);
for(int i=0;i<10;i++){
reverse(num,rev,strlen(num));
printf("%s + %s = ",num,rev);
add(num,rev,strlen(num));
printf("%s\n",num);
if(isCorrect(num,strlen(num))){
printf("%s is a palindromic number.",num);
return 0;
}
}
printf("Not found in 10 iterations.");
return 0;
}
BuildPalindromic.c