吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2238|回复: 19
收起左侧

[C&C++ 转载] 初学C语言_回文数

[复制链接]
Minister 发表于 2020-11-12 10:30
回文數 數字正序和倒序相同(以下仅讨论正整数)
例如 121, 5 , 198 ....
[C] 纯文本查看 复制代码
# include <stdio.h>
/*
回文數 數字正序和倒序相同
例如 121, 5 , 198 ....
*/
int main(void){
        int val;//存放待判定的數字
        int m;
        int sum=0;
        printf("請輸入數字\n");
        scanf("%d",&val);
        m=val;
        printf("m sum\n");
        while(m){
                sum=sum*10+m%10;
                m /= 10;
        }
        if(val==sum)
                printf("yes!\n");
        else
                printf("no\n");
        return 0;
}

模拟执行过程:初始化 sum=0    m=123
sum m
0 123
0*10+123%10=3 12
3*10+12%10=32 1
32*10+1%10=321 0(跳出while)


常规总结
按照数学算法,实际就是看这数没否被11整除,分情况讨论:
1.数<10 本身即为回文数
2.数≥10 能被11整除即为回文数,否则不是


[C] 纯文本查看 复制代码
# include <stdio.h>
int main(void){
	int val;				//存放待判定的數字
	int m;
	int sum=0;
	printf("請輸入數字");
	scanf("%d",&val);
	if(val>10){				
		if(val%11==0)		//被11整除
			printf("yes\n");
		else
			printf("no\n");
	}else{
		printf("yes\n");
	}
	return 0;
}


免费评分

参与人数 1吾爱币 +1 收起 理由
念七呀 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

古月不傲 发表于 2020-12-3 11:36
本帖最后由 古月不傲 于 2020-12-3 11:49 编辑

[C++] 纯文本查看 复制代码
#include <iostream>
#include <cstring>

using namespace std;

int main() {
    char num[50]{};
    printf("请输入一个数字判断回文数:");
    scanf("%s", num);

    int len = strlen(num); 
    char *begin = num;;
    char *end = &(num[len-1]);
    int count = 0;
    int half = len >> 1;
    
    while (half != 0 && half--) {
        if (*begin == *end) {
            count++;
        }
        begin++;
        end--;
    }
    if (count == len >> 1) {
        printf("是回文数\n");
    }
    else {
        printf("不是回文数\n");
    }
    return 0;
}

时间:O(0.5N) 不管是奇数个,还是偶数个,构建头尾指针,对比一半即可。
drophair 发表于 2020-11-12 12:14
本帖最后由 drophair 于 2020-11-12 12:16 编辑

回文串用string读入,然后再开一个string存放经过reverse处理的字符串,两者进行对比,如果相等就是回文串
[C++] 纯文本查看 复制代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
    string a,b;
    cin>>a;
    b=a;
    reverse(a.begin(),a.end());
    if(a==b)
    {
        cout<<"是回文串"<<endl;
    }
    else
    {
        cout<<"不是回文串"<<endl;
    }
}

这种方法不光适用于数字还可以用在字符串
简简单单有手就行 /滑稽
zfzhhh 发表于 2020-11-12 11:30
layuai 发表于 2020-11-12 11:32
用数组感觉更方便存放计算
lxwx 发表于 2020-11-12 11:50
你这个算法有问题,11的倍数可不一定是回文数,比如132,143,回文数也未必是11的倍数,比如101,111。
西楠 发表于 2020-11-12 11:51
一个自然数,如果从左向右看和从右向左看数字都一样,换句话说,就是“数字排列左右对称”,就把它叫做“回文数”。比如121、5335、6084806都是回文数。当然,由同一个数字组成的数,如11,999也是回文数。
 楼主| Minister 发表于 2020-11-12 12:01
lxwx 发表于 2020-11-12 11:50
你这个算法有问题,11的倍数可不一定是回文数,比如132,143,回文数也未必是11的倍数,比如101,111。

对对对 整除11跟 回文有交集 但不必然
drophair 发表于 2020-11-12 12:05
zfzhhh 发表于 2020-11-12 11:30
898是不是回文数,

898怎么不是回文数?
lxwx 发表于 2020-11-12 12:10
drophair 发表于 2020-11-12 12:05
898怎么不是回文数?

他的意思是898虽然是回文数,但在你的程序里就不是了。。
鸭子咯咯哒~ 发表于 2020-11-12 12:10
算法好难,看不懂,怎么学的
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 22:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表