每日一题_____
从键盘输入一个可带空格的字符串,
判断该字符串是否是回文(回文指正向读与逆向读相同的字符串,如 abcddcba或abcba等)。如果字符串是回文,输出"Yes",否则输出"No"。
.
.
#include<stdio.h>
#include<string.h>
void judge(char str[]);
int main(){
char str[50];
int size;
printf("请输入一个可带空格的字符串,判断是否是回文:\n");
gets(str); //因为空格也要输进去,不能用scanf
judge(str);
return 0;
}
void judge(char str[]){
int i=0;
int size=strlen(str);
for(;i<size;i++){
if(str[i]!=str[size-i-1]) //例如:abc d cba str[i]和str[size-i-1]对应第一个和最后一个字符,如果不等就跳出。
break;
}
if(i==strlen(str)) //看是否i进行到了最后
printf("YES\n");
else printf("NO\n");
}
上面是会问字符,还有回文数的判断,即12321是回文数。
下面是回文数:(输入任意位数字)
.
感觉写的好麻烦,寻找好的方法是多么重要 ……
#include <stdio.h>
void main(){
int num,yu,i=0,j=0,count=0; //num是输入的数, yu余数, i是store[i]下标, count是计数store有多少个元素
int store[10]; //用于存余数
printf("Please input numbers: ");
scanf("%d", &num); //要判断的数据
while(num!=0){ //例如:如果是121,除以10余数为*1*,值为12......重复,余数为*2*,值为1,再重复,余数为*1* store里就是1 2 1
yu=num%10;
store[i]=yu; //余数存入
num=num/10;
i++;
count++; //每次进行count加1,计数store有多少个元素
}
for(j=0;j<count;j++){ //往下和字符回文一样了
if(store[j]!=store[count-j-1])
break;
}
if(j==count)
printf("YES\n");
else
printf("NO\n");
}
我们将原数倒置后与原数比较,判断是否相同,相同即为回文数,反之不是。
int judge(int num);
void main(){
int num;
printf("Please input numbers: ");
scanf("%d", &num);
if(judge(num)) //返回判断
printf("YES");
else
printf("NO");
}
int judge(int num){
int temp,sum=0,i; //temp是存原有的数 sum是最后倒置的数
temp=num; //先将原数存起来
while(num){ //当num不为0时
i=num%10; //比如121 num%10余数为*1*,值为12 再重复 余数为*2* 值为1,然后再..余数*1* 值为0
num=num/10;
sum=sum*10+i;
}
if(sum==temp)
return 1;
else return 0;
}