问题 D: 回文判断(函数)//回文字符串的快速算法//回文数的快速判断

字符回文数判断

回文判断(函数)
编写一个函数int isPalindrome(char s[]),判断参数表示的字符串是否是回文,如果是返回1,否则返回0。在主函数中调用它,判断输入的字符串是否是回文,如果是,输出“yes”,如果不是,输出”No”。
输入
测试数据的个数 t
第一个字符串
第二个字符串
…….
输出
如果是,输出“yes”,如果不是,输出”No”
样例输入
3
abba
abcba
ab
样例输出
Yes
Yes
No

不同的思维是编写一个loop先分长度的奇偶数,偶数一次让前后数对比是否相等不想等跳出loop标记0;奇数中间的不理就好。
但高手的思维不是这样的,有更好的方法:

#include<stdio.h>
#include<string.h>
int isPalindrome(char s[]);
int main()
{
    int t,i;
    char str[100];
    scanf("%d",&t);
    getchar();
    for(i=0;i<t;i++)
    {
        gets(str);
        if(isPalindrome(str)==1) printf("Yes\n");
        else printf("No\n");
    }
    return 0;
}
int isPalindrome(char s[])
{
    int i,j;
    char str[100];
    /*先将这个字符串倒位赋值给一个新的数组*/
    for(i=strlen(s)-1,j=0;i>=0;i--,j++)
        str[i]=s[j];
        /*记得要加字符串的尾巴*/
    str[j]='\0';
    /*神奇的调用了对比字符串的幻术strcmp  str+compare*/
    if(strcmp(str,s)!=0) return 0;
    else return 1;
}

hint:注意一个数也是回文数的哦,但下面1就不是素数了,素数是指大于1的数

回文数的快速算法:

问题 L: 输出同时是素数与回文数的数据
题目描述
输出指定范围内的同时是素数与回文数的数据,如果没有,输出“Not found”
输入
测试数据的组数n
第一组指定数据范围的起始值与终止值
第二组指定数据范围的起始值与终止值
……….
第n组指定数据范围的起始值与终止值
输出
输出该范围内同时是素数与回文数的数据,如果没有,输出”Not found”
样例输入
2
100 200
20 50
样例输出
101
131
151
181
191
Not found

#include <stdio.h>
int main()
{
    int o,a,b,i,n,k,sum=0,p=0;
    scanf("%d", &n);
    for (o = 0; o < n; o++)
    {
        scanf("%d%d", &a, &b);
        for (i = a; i <= b; i++)
        {
         /*判断素数的快速算法*/
            for (k = 2; k < i; k++)
            {
                if (i%k == 0)
                break;
            }
            if (k == i)
            {
            /*重点重点*/
                while (k)
                {
                    sum = sum * 10 + k % 10;
                    k = k / 10;
                }
            /*纯利用数学方法的回文数字判断方法*/
                if (sum == i)
                {
                printf("%d\n", i);
                p = p + 1;
                }
            }
        sum = 0;
        }
    if (p == 0)
    printf("Not found\n");
    p = 0;
    }
    return 0;
}
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值