精华内容
下载资源
问答
  • 【C语言】判断一个数是不是回文数

    万次阅读 多人点赞 2018-08-16 15:59:19
    所谓回文数,就是说一个数字从左边读和从右边读的结果是一模一样的,例如12321。判断给出的整数是否是回文数;若是,则输出该整数各位数字之和;否则输出该数不是一个回文数。 原理大致为:任何一个数除以10的余数...

    所谓回文数,就是说一个数字从左边读和从右边读的结果是一模一样的,例如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

    展开全文
  • 判断一个数是不是回文数 概念: 设n是一任意自然数。若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。例如,若n=1234321,则称n为一回文数;但若n=1234567,则n不是回文数。 ​ 注意: ​ 1.偶数个的...

    判断一个数是不是回文数

    概念:
    设n是一任意自然数。若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。例如,若n=1234321,则称n为一回文数;但若n=1234567,则n不是回文数。

    ​ 注意:

    ​ 1.偶数个的数字也有回文数124421

    ​ 2.小数没有回文数

    思路: 还是取余,把每个位置上的数单独取出来,依次判断(如12321,第一位和最后一位是不是匹配)

    #include<iostream>
    using namespace std;
    int main(){
    	int n,m,k,s=0,size=50;
        cout<<"请输入一个大于1的正整数:"<<endl;
    	cin>>n;  
    	m=n;
    	int *p = new int[size];
        //把回文数每一位数存到数组里
    	while(m!=0){               
    			k = m%10;           //循环取n的每位数。
    			m = m/10; 
    			p[s] = k; 
    			s++;                //回文数长度
    	}
    	
    	cout<<"输出回文数长度:"<<s<<endl;
    	//输出数组中存的每位数
    	for(int i =0;i<s;i++){
    		cout<<p[i]<<" ";
    	}
    	int q = s;
    	for(int i=0;i<q;i++){      //前后逐个判断,如果是回文数,肯定会到同一个位置
    		if(p[i]==p[q-1]){
    			q--;
    		}
    		else{                 //如果不是回文数,不匹配就跳出循环
    			break;
    		}
    	}
    	if(q==s/2){               //如果能匹配到中间的数,依照上述算法可以判断是回文数。
    			cout<<n<<"是回文数"<<endl;
    	}
    	else{
    			cout<<n<<"不是回文数"<<endl;
    	}
    }
    

    输出结果如下图:
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 题目:一个5位数,判断是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。 @Test public void test3() { /** * 数组 * 16.题目:一个5位数,判断是不是回文数。即12321是回文数,个位与...

    题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

    @Test
    	public void test3() {
    		/**
    		 * 数组
    		 * 16.题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
    		 */
    		Scanner scanner=new Scanner(System.in);
    		System.out.println("请输入一串字符:");
    		String str=scanner.nextLine();
    		char[] array=str.toCharArray();
    		System.out.println(Arrays.toString(array));
    		boolean huiwen=true;
    		for (int i = 0, j=array.length-1;i <j; i++,j--) {
    			if (array[i]!=array[j]) {
    				huiwen=false;
    				System.out.println("不是回文!");
    				break;
    			}
    		}
    		if (huiwen) {
    			System.out.println("是回文!");
    		}
    		/*
    		boolean ishuiwen=true;
    		for (int i = 0; i < array.length; i++) {
    			if (array[i] != array[array.length-1-i]) {
    				ishuiwen=false;
    				System.out.println("不是回文!");
    				break;
    			}
    		}*/
    	}
    
    展开全文
  • c语言判断一个数是不是回文数

    千次阅读 多人点赞 2019-03-25 19:16:08
    那么判断一个回文数,就是将该数倒置过来和原数比较,当两数相等时,该数即为回文数。那么这道题的重点就是如何将一个数倒置了。 具体的倒置过程本人的思路是拆出原数的每一位,然后再通过迭代就可以得到倒置后的数...

    回文数定义:各位数字反向排列所得自然数n1与原数n相等,则称n为回文数—(来自百度百科)
    那么判断一个回文数,就是将该数倒置过来和原数比较,当两数相等时,该数即为回文数。那么这道题的重点就是如何将一个数倒置了。
    具体的倒置过程本人的思路是拆出原数的每一位,然后再通过迭代就可以得到倒置后的数。有做过水仙花数题的同学肯定都知道怎么拆数的。思路清楚后就开始实现了:

    int PalJudnum(int num)//返回num的倒置数sum
    {
    	int sum = 0;
    	while (num)
    	{
    		sum = sum * 10 + (num % 10);
    		num /= 10;
    	}
    	return sum;
    }
    
    int main()
    {
    	int n = 0;
    	scanf("%d", &n);
    	if (PalJudnum(n)==n)
    	{
    		printf("%d是回文数。\n",n);
    	}
    	else
    	{
    		printf("%d不是回文数。\n",n);
    	}
    	return 0;
    }
    

    既然写成函数,那么最好将倒置数和原数的判断在函数内,函数只管返回传入的的参数是不是回文数就ok了;

    bool PalJudnum(const int num)
    {
    	int tmp = num;//保存该变量的值
    	int sum = 0;
    	/*while (tmp)
    	{
    		sum = sum * 10 + (tmp % 10);
    		tmp /= 10;
    	}*/
    	for (int i = tmp; tmp; tmp /= 10)
    	{
    		sum = sum * 10 + (tmp % 10);
    	}
    	if (num == sum)
    	{
    		return true;
    	}
    	else
    	{
    		return false;
    	}
    }
    int main()
    {
    	int n = 0;
    	scanf("%d", &n);
    	if (PalJudnum(n))
    	{
    		printf("%d是回文数。\n", n);
    	}
    	else
    	{
    		printf("%d不是回文数。\n", n);
    	}
    	return 0;
    }
    

    注:c语言使用bool类型需要加头文件stdbool.h
    这道题的主要难点在于数位遍历(取每一位)和迭代求和,掌握这两种方法后这道题就容易很多了。

    展开全文
  • 举例:从键盘输入一个数字,如果该数字是回文数,则返回yes,否则返回 no。 # include <stdio.h> int main() { int val; int m; int sum = 0; printf("请输入您需要判断的数:"); scanf("%d", &...
  • 昨天分享了怎么来判断一个数字的奇偶性,其中用到了if选择语句和求余运算,虽然都不是很难的知识点,但是也不可能分享一次就不管了,所以今天继续分享一个和它俩有关的的代码:如何判断一个五位数是不是回文数。...
  • 判断一个数是不是回文数   我的想法是先将数字变成数组,然后设置两个指针分别从开头和末尾一一比对.   话不多说,代码如下: package com.yangshunfan.LintCode; /* * 判断一个数是不是回文数 */ public ...
  • 用户从键盘输入一个1—9999之间的数,程序将判断个数是几位数,并判断个数是否是回文数。回文数是指将该数含有的数字逆序排列后得到的数和原数相同,例如12121、3223都是回文数。*/public class JudgeHuiWen {...
  • 递归判断一个数是不是回文数

    千次阅读 2017-06-01 10:45:15
    回文数就是原数与其倒置后的数相等,如:123321,到之后仍为123321,即为回文数
  • 有这样一类数字,他们顺着看和倒...编写一个函数,判断某数字是否是回文数字。public class PalindromeNumber {public static void main(String[] args) {// TODO Auto-generated method stubScanner scan = new Sc...
  • 键盘输入一个数字, 判断数字是否为回文 思路 想办法把一个数字高低位数对调, 1234 变成 4321;输入数字a, 每次对10取整就截断个位数, 每次对10取余得到个位数, 这样就是一个在一位一位的变大, 一个在逐渐变小...
  • import java.util.Scanner; public class cpdd{ ... System.out.println("请输入需要进行判断的五位数:"); int a=scan.nextInt(); if(a>99999|a<10000){ System.out.println("输入错误");
  • Java根据用户指定的5位数,判断一个是不是回文数,即12321是回文数,个位与万位相同,十位与千位相同。先判断判断输入的数字是否为五位数,如果不是五位数则提示重新输入,如果是则将数字存入数组a中,将数组a里的...
  • 昨天分享了怎么来判断一个数字的奇偶性,其中用到了if选择语句和求余运算,虽然都不是很难的知识点,但是也不可能分享一次就不管了,所以今天继续分享一个和它俩有关的代码:如何判断一个五位数是不是回文数。...
  • 昨天分享了怎么来判断一个数字的奇偶性,其中用到了if选择语句和求余运算,虽然都不是很难的知识点,但是也不可能分享一次就不管了,所以今天继续分享一个和它俩有关的代码:如何判断一个五位数是不是回文数。...
  • 题目: 编写一个函数,求一个数字是否是...(2)再用首位数字和末尾数字进行判断,如果不相等,直接判断不是回文数,如果相等那么再将首位数字和末尾数字去除,再循环上述方法进行判断 源码: 运行结果如下: ...
  • C++判断一个数是不是回文数

    千次阅读 2020-03-04 21:52:43
    #include<iostream> using namespace std; bool isSymm(int n); int main() { int n; printf("Input n:"); cin >> n; if (isSymm(n))printf("Yes!"); else printf("No!...bool isSymm(int n) ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 744
精华内容 297
关键字:

判断一个数是不是回文数