【C语言】判断一个数是不是回文数
所谓回文数,就是说一个数字从左边读和从右边读的结果是一模一样的,例如12321。判断给出的整数是否是回文数;若是,则输出该整数各位数字之和;否则输出该数不是一个回文数。原理大致为:任何一个数除以10的余数就是该数最后一位;任何一个数除以10的商就是排除掉最后一位后的数;所以 ,一个数1234 就可以通过这种方法得到 123 和 4;接下来对 123 进行同样的操作,就得到 12 和 3;接下来..
·
所谓回文数,就是说一个数字从左边读和从右边读的结果是一模一样的,例如12321。判断给出的整数是否是回文数;若是,则输出该整数各位数字之和;否则输出该数不是一个回文数。
原理大致为:任何一个数除以10的余数就是该数最后一位;任何一个数除以10的商就是排除掉最后一位后的数;所以 ,一个数1234 就可以通过这种方法得到 123 和 4;接下来对 123 进行同样的操作,就得到 12 和 3;接下来得到 1 和 2;接着得到 0 和 1;整个过程是个循环,当商不是 0 的时候就一直如此;每次拿到一个余数,都用来构造新数,新数=新数*10+余数;所以经过四次循环后,我们得到新数 4321 ,如果是回文,那么新数应该等于原数,否则,说明不是回文。
首先,我们来判断一下一个数是否为回文数:
#include <stdio.h>
void main(){
int num,s,y=0;
printf("Please input numbers: ");
scanf("%d", &num);
s=num;
while(s>0){
y=y*10+s%10;
s=s/10;
}
if(y==num){
printf("%d是一个回文数!\n", num);
}else{
printf("%d不是一个回文数!\n", num);
}
}
接下来小编为我们判断一下一个字符串是否为回文数:
方法一:
#include <stdio.h>
#include<string.h> //strlen函数的头文件
int main()
{
int j,i,n;
char a[999],b[999];
printf("Please input string: ");
scanf("%s",a); //输入字符串
n=strlen(a); //用strlen函数读取字符串长度(长度到\0停止)
for(i=0,j=n-1;i<n;i++,j--) //循环将字符串a逆序赋值给b
b[j]=a[i];
for(i=0;i<n;i++)
{
if(b[i]!=a[i])
break; //判断是否回文
}
if(i==n) printf("是一个回文数!\n"); //如果从第1位到n都相同 则输出回文数
else printf("不是一个回文数!\n");
return 0;
}
方法二:
#include <stdio.h>
#define N 80
int fun(char *str)
{
int i,n=0,fg=1; //设置标志位
char *p=str;
while(*p){ //将指针p置位到字符串末尾,并统计字符数
n++;
p++;
}
for(i=0;i<n/2;i++){ //循环比较字符
if(str[i]==str[n-1-i]); //相同,什么都不作
else{ //否则,直接跳出循环
fg=0;
break;
}
}
return fg;
}
main()
{
char s[N];
FILE *out;
char *test[]={"1234321","123421","123321","abcdCBA"};
int i;
printf("Enter a string : ");
gets(s);
printf("\n\n");
puts(s);
if(fun(s))
printf("YES\n");
else
printf("NO\n");
/************************************/
out=fopen("out.dat","w");
for(i=0;i<4;i++)
if(fun(test[i]))
fprintf(out,"YES\n");
else
fprintf(out,"NO\n");
fclose(out);
/************************************/
}
版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/qq_42680327
更多推荐
所有评论(0)