第一篇博客就来写一下这次面试婷婷学姐问我的一个问题吧!
最开始我只会用最笨的办法把每位上的数字都写出来
再去比较首末是否相等去判断是否为回文数。
#include <stdio.h>
int main()
{
int arr[5];
printf("请输入五位数:");
for (int i=0;i<5;i++)
scanf("%d",&arr[i]);//输入时应在每个数字之间输入空格
if(arr[0]==arr[4]&&arr[1]==arr[3])
printf("yes\n");
else
printf("no\n");
return 0;
}
后来我觉得重复很麻烦,就用循环来输出数,并比较。
将数字储存到数组中,比较a[i]和a[j]的值是否相同即可。
while (n){
a[i]=n%10;
n/=10;
i++;
}
i--;
for (j=0;j<=i;j++,i--);{
if (a[i]!=a[j]) {
b=0;
}
}
if(b)
printf ("yes");
else
printf ("no"); }
我又想了另一个办法,将这个数字我重新计算
如果新计算的数字和原来的数字相同,那么就是回文数。
#include <iostream>
#include <math.h>
int main()
{
int num;
int t;
int a = 0;
int n;
scanf ("%d",&num);
t = num;
n = floor(log10(num)) + 1; //计算这是几位数
for(int i=1; i<=n; i++) {
a = a * 10 + t % 10;//倒过来计算这个数字
t /= 10;
}
if (num == a) //判断是不是回文数
printf ("yes");
else
printf ("no");
return 0;
}
但是这个需要计算出数字的长度,即它是几位数。
# include <stdio.h>
int main()
{ int n,m,s = 0;
scanf("%d",&n);
m = n;
while(n) {
s *= 10;
s += n%10;
n /= 10;
}
if(s == m)
printf("yes");
else
printf("no");
}
这样直接在除余时就将数字算好,也就不需要去计算数字的长度了。
面试的时候,学姐告诉我,回文数不光可以判断数字,也可以判断字母,在学姐的引导下,我有了思路,改变了以前的方法,将回文数拓展到了回文字符。
#include<stdio.h>
#include <string.h>
int main(){
char str[1000];
int i,len,k;
while(1){
scanf("%s",str);
len=strlen(str);
for(i=0;i<len/2;i++)
if(str[i]!=str[len-i-1])
break;
if(i==len/2)
printf ("yes");
else
printf ("no");
}
}
到这里,回文数回文字符都可以判断,也可以混合判断。
如果有什么错误,还请大家斧正。