初学C语言_回文数
回文數 數字正序和倒序相同(以下仅讨论正整数)例如 121, 5 , 198 ....
# 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整除即为回文数,否则不是
# 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;
}
本帖最后由 古月不傲 于 2020-12-3 11:49 编辑
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char num{};
printf("请输入一个数字判断回文数:");
scanf("%s", num);
int len = strlen(num);
char *begin = num;;
char *end = &(num);
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:16 编辑
回文串用string读入,然后再开一个string存放经过reverse处理的字符串,两者进行对比,如果相等就是回文串#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;
}
}
这种方法不光适用于数字还可以用在字符串
简简单单有手就行 /滑稽 898是不是回文数, 用数组感觉更方便存放计算 你这个算法有问题,11的倍数可不一定是回文数,比如132,143,回文数也未必是11的倍数,比如101,111。 一个自然数,如果从左向右看和从右向左看数字都一样,换句话说,就是“数字排列左右对称”,就把它叫做“回文数”。比如121、5335、6084806都是回文数。当然,由同一个数字组成的数,如11,999也是回文数。 lxwx 发表于 2020-11-12 11:50
你这个算法有问题,11的倍数可不一定是回文数,比如132,143,回文数也未必是11的倍数,比如101,111。
:lol 对对对 整除11跟 回文有交集 但不必然 zfzhhh 发表于 2020-11-12 11:30
898是不是回文数,
898怎么不是回文数? drophair 发表于 2020-11-12 12:05
898怎么不是回文数?
他的意思是898虽然是回文数,但在你的程序里就不是了。。 算法好难,看不懂{:1_937:},怎么学的
页:
[1]
2