实验八
题目描述
从键盘上输入任意一个整数(正负数皆可),判断该整数的绝对值是否为回文数。[提示:取数的绝对值,然后使用用循环语句从该绝对值的末位开始至最高位,重新构造一个数,判断该数与原绝对值是否相等。]
方法1 数字法
对于一个数逐个取出个位数,在下次循环时一次乘10实现向左移动一位,然后当变量为0结束时。
举个例子:
input: a = 323
variable: n = 323 y = 0
loop(0): t = n % 10 = 3
y = y * 10 = 0
y = y + t = 3
n = n / 10 = 32
loop(1): t = n % 10 = 2
y = y * 10 = 30
y = y + t = 32
n = n / 10 = 3
loop(2): t = n % 10 = 3
y = y * 10 = 320
y = y + t = 323
n = 0
end
核心代码
while(n!=0)
{
t = n % 10;
y = y * 10;
y = y + t;
n = n/ 10;
}
推荐简便一点:
while( n!=0 )
{
y = y * 10 + n % 10;
n = n / 10;
}
完整代码:
#include <stdio.h>
int main()
{
int a,x,y,n;
printf("输入一个整数:");
scanf("%d",&a);
x = a>=0 ? a : -a;
n = x;
y = 0;
while( n!=0 )
{
y = y * 10 + n % 10;
n = n / 10;
}
if( x == y )
printf ("%d的绝对值是回文数!\n",a);
else
printf ("%d的绝对值不是回文数!\n",a);
return 0;
}
方法2 字符串法
首尾相互判断两元素是否相等,当元素相等时继续循环,不相等时退出循环
// 核心代码
while (i <= len/2) // 只需要判断到一半位置
{
if ( str[i] == str[len-1-i] ) //数组最后一个元素的下标是 len-1
i++;
else
{
printf ("输入数的绝对值不是回文数.\n");
return 0; // 直接结束循环
}
}
完整代码:
#include<stdio.h>
#include<math.h>
#include<string.h>
int main ()
{
int x, y, len, i;
char str[100];
printf ("请输入一个整数:\n");
scanf ("%d", &x);
y = abs(x);
sprintf(str, "%d", y);
len = strlen(str);
i = 0;
while (i <= len/2)
{
if ( str[i] == str[len-1-i] ) //数组最后一个元素的下标是 len-1
i++;
else
{
printf ("输入数的绝对值不是回文数.\n");
return 0;
}
}
printf ("输入数的绝对值是回文数.\n");
return 0;
}