首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

小弟我自己写的一个判断回文数的程序,但遇到了一些有关问题

2012-03-06 
我自己写的一个判断回文数的程序,但遇到了一些问题/*判断任意输入的一个整数是否为回文数思路:将所输入的

我自己写的一个判断回文数的程序,但遇到了一些问题
/*
判断任意输入的一个整数是否为回文数  
思路:   将所输入的数字从个位数开始按顺序分解到数组1,2,3,4...里,
然后将数组的两头进行对比,从而判断其是否为回文数
*/
#include <stdio.h>
#include   <conio.h>
#include <math.h>

int   main()
{
          int   a[20];   //数组从1开始,0舍弃  
          int   num,lenth,n,i,b=0,c=0,p;  
        //   n是每一位数所在数组的编号;i用来判断是否为回文数;p用来打印数组进行验证  
       
        printf( "请输入一个至少为三位数的数字\n ");
        scanf( "%d ",&num);
        printf( "请输入%d的位数\n ",num);
        scanf( "%d ",&lenth);
       
        while     (num <100)     /*必须输入一个三位以上的整数*/
        {
                      printf( "请输入一个至少为三位数的数字\n ");
                      scanf( "%d ",&num);
        }
       
        for   (n=1;n <=(lenth-1);n++)             //分解所输入数除最高位的每一位数  
        {        
                  a[n]=num%((int)pow(10,n))/(pow(10,n-1));
                  printf( "a[%d]=   %d\n ",n,a[n]);       //打印每一位的数字  
        }
        a[lenth]=num/(pow(10,lenth-1));     //读取最高位  
        printf( "a[%d]=   %d\n ",lenth,a[lenth]);     //打印最高位  
       
          //以下是判断所输入数字是否为回文数
        if   (lenth%2==0)             //为偶数位时  
        {
                for   (i=1;i <=(lenth/2);i++)  
                {
                        if   (a[i]==a[lenth+1-i])   b++;
                }  
               
                if   (b==(lenth/2))  
                        printf( "%d   是回文数   ",num);
                else  
                        printf( "%d   不是回文数 ",num);  
                       
        }
        else       //为奇数位时
        {
                for(i=1;i <=((lenth-1)/2);i++)
                        if   (a[i]==a[lenth+1-i])   c++;
               
                if   (c==((lenth-1)/2))  


                        printf( "%d   是回文数   ",num);
                else  
                        printf( "%d   不是回文数 ",num);  
        }
       
        getch();
        return   0;
}
当我输入1234321时结果如下
请输入一个至少为三位数的数字
1234321
请输入1234321的位数
7
a[1]=   1
a[2]=   8
a[3]=   3
a[4]=   4
a[5]=   3
a[6]=   2
a[7]=   1
1234321   不是回文数
不知为何,还望大家帮忙看看


[解决办法]
1 num 的分解,可以使用 sprintf

2 if (lenth%2==0) //为偶数位时
这里不需要分支,注意如果是 奇数,那么 (b==(lenth/2)) 的时候, 小数0.5是被舍弃的,所以, 不需要 (c==((lenth-1)/2)) 这样的独立判断
[解决办法]
#include <iostream>
using namespace std;
int main()
{
int iInput;
cin> > iInput;
int ilength = 0;
int array[20];
int i = 0;
while (iInput != 0)
{
array[i++] = iInput % 10;
iInput /= 10;
ilength++;
}
int pos = 0;
ilength--;
while (pos <= ilength)
{
if (array[pos] != array[ilength])
break;
pos++;
ilength--;
}
if (pos < ilength)
cout < < "不是 " < <endl;
else
cout < < "是 " < <endl;
return 0;
}
偶的一个 楼住参考.. 你的太混乱了 而且都都用了 pow(10,n)了, 没必要啊...
[解决办法]
改一下吧:【没有环境,自己测试一下, 抱歉了】

#include <stdio.h>
#include <conio.h>
#include <math.h>

int main()
{
char a[20]; //字符串方式
int num,flag=0,i,j;
// flag 是回文数标记, i, j 是辅助变量

printf( "请输入一个至少为三位数的数字\n ");
scanf( "%d ",&num);
printf( "请输入%d的位数\n ",num);
scanf( "%d ",&lenth);

while (num <100) /*必须输入一个三位以上的整数*/
{
printf( "请输入一个至少为三位数的数字\n ");
scanf( "%d ",&num);
}

sprintf(a, "%d ", num);
j= strlen(a)-1;
for(i=0; i <j; i++,j--) if(a[i] != a[j])break;

if (i <j)
printf( "%d 是回文数 ",num);
else
printf( "%d 不是回文数 ",num);
getch();
return 0;
}

[解决办法]
我用 dev c++ 都没问题。。。

热点排行