C++语言 输入一个正整数,判断它是否是回文数

使用whiledowhile的语句结构输入一个正整数,判断它是否是回文数,所谓回文数就是从左往右读与从右往左读都一样的数,如“121”、“12321”... 使用 while dowhile的语句结构
输入一个正整数,判断它是否是回文数,所谓回文数就是从左往右读与从右往左读都一样的数,如“121”、“12321”
展开
 我来答
问明6E
高粉答主

2019-06-25 · 每个回答都超有意思的
知道答主
回答量:279
采纳率:100%
帮助的人:12.9万
展开全部

#include<stdio.h>

#include<stdlib.h>

int main()

int num,k,n=0;

printf("请输入一个数:");

scanf("%d",&num);

k=num;

while(k>0)

n=n*10+k%10;

k=k/10;

if(n==num)

printf("%d是回文数",n);

else

printf("No!它不是回文数!");

return0;

运行效果:

扩展资料:

while语句若一直满足条件,则会不断的重复下去。但有时,需要停止循环,则可以用下面的三种方式:

一、在while语句中设定条件语句,条件不满足,则循环自动停止。

如:只输出3的倍数的循环;可以设置范围为:0到20。

二、在循环结构中加入流程控制语句,可以使用户退出循环。

1、break流程控制:强制中断该运行区内的语句,跳出该运行区,继续运行区域外的语句。

2、continue流程控制:也是中断循环内的运行操作,并且从头开始运行。

White_MouseYBZ
推荐于2018-05-23 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6632万
展开全部

办法很多,下面提供三种思路和实现方法。

(1)将输入的正整数倒序构成一个新数,若新数与原数相等则是回文数,否则不是——

#include "stdio.h"
int main(int argc,char *argv[]){
int n,m,i;
printf("Input n(int n>=0)...\n");
if(scanf("%d",&n)!=1 || n<0){
printf("Input error, exit...\n");
return 0;
}
printf("\n%d:\t",n);
for(m=0,i=n;i;(m*=10)+=i%10,i/=10);
printf(m==n ? "Yes.\n" : "No.\n");
return 0;
}

(2)将输入的正整数转换成字符串,检查前半栽和后半栽倒序对应字符,都相等则是回文数,否则不是——

#include "stdio.h"
#include "string.h"
#include "stdlib.h"
int main(int argc,char *argv[]){
int n,i,j;
char s[11];
printf("Input n(int n>=0)...\n");
if(scanf("%d",&n)!=1 || n<0){
printf("Input error, exit...\n");
return 0;
}
printf("\n%d:\t",n);
for(j=strlen(itoa(n,s,10))-1,i=0;i<j;i++,j--)
if(s[i]-s[j])
break;
printf(i>=j ? "Yes.\n" : "No.\n");
return 0;
}

(3)直接分离最高位与最低位,次高位与次低位……依次比较,都相等时为回文数,否则不是——

#include "stdio.h"
int main(int argc,char *argv[]){
int n,i,m;
printf("Input n(int n>=0)...\n");
if(scanf("%d",&n)!=1 || n<0){
printf("Input error, exit...\n");
return 0;
}
printf("\n%d:\t",n);
for(m=1,i=n;i>10;i/=10,m*=10);
for(i=1;i<m;i*=10,m/=10)
if(n/m%10-n/i%10)
break;
printf(i>=m ? "Yes.\n" : "No.\n");
return 0;
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
仙戈雅3n
2015-05-21 · TA获得超过5790个赞
知道大有可为答主
回答量:2398
采纳率:75%
帮助的人:897万
展开全部
#define  _CLANUAGE_

#ifndef  _CLANUAGE_
#define  _CLANUAGE_
#include <stdlib.h>
#include <stdio.h>
#endif

#ifndef  _CPP_
#define  _CPP_
#include <iostream>
using namespace std;
#endif


/*
    操作结果: 0-非回文,1是回文 
*/
int hws(int n){

int sum = 0, m;
m = n;

while (m)
{
sum = sum * 10 + m % 10;  // sum为反复取的个位数加上次的sum的10倍
m /= 10; // 反复缩小10倍
}

if (sum == n) return 1;

return 0;
}

void main(void){

if (hws(121)) cout<<"YES.\n";
else cout<<"No.\n";

system("pause");
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友53a4e24
2015-05-21 · TA获得超过155个赞
知道小有建树答主
回答量:127
采纳率:0%
帮助的人:72.3万
展开全部
#include <iostream>
using namespace std;
void main()
{
int input;
int i;
int length;
char inputString[10];
char *p1, *p2;
cin >> input;
sprintf(inputString, "%d\0", input);
i = 0;
while (inputString[i] != '\0')
{
i++;
}
length = i;
p1 = inputString;
p2 = p1 + length - 1;
while (*p1 == *p2)
{
p1++;
p2--;
if (p1 >= p2)
{
cout << "yes!" <<endl;
return;
}
}
if (p1 < p2)
cout << "no!" << endl;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2018-05-23
展开全部
#include<iostream>
using namespace std;
void main()
{
int a,m,n,k=0,l=0;
cout<<"n=";
cin>>n;
for(m=n;m>0;)
{
k=m%10;
m/=10;
l=l*10+k;
}
if(l==n)
cout<<"shi"<<endl;
else
cout<<"bu shi"<<endl;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式