| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1590 人关注过本帖
标题:回文数 C语言求解
只看楼主 加入收藏
软工学生
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-5-11
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:3 
回文数 C语言求解
Description
若一个数(首位不为0)从左到右读与从右到左读都是一样,这个数就叫做回文数,例如12521就是一个回文数。
给定一个正整数,把它的每一个位上的数字倒过来排列组成一个新数,然后与原数相加,如果是回文数则停止,如果不是,则重复这个操作,直到和为回文数为止。给定的数本身不为回文数。
例如:87则有:
STEP1: 87+78=165
STEP2: 165+561=726
STEP3: 726+627=1353
STEP4: 1353+3531=4884
编写一个程序,输入M(12<=M<=100),输出最少经过几步可以得到回文数。如果在8步以内(含8步)不可能得到回文数,则输出0。


Input
第1行一个正整数L,代表测试数据的组数。
接下来L行每行一个整数M(12<=M<=100),M本身不为回文数;


Output
输出L行,第i行对应输入数据的第i+1行,输出最少需要的步数;如果步数大于8,则输出0。

Sample Input
3
12
87
89


Sample Output
1
4
0

搜索更多相关主题的帖子: C语言 正整数 
2013-05-12 17:18
软工学生
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-5-11
收藏
得分:0 
我是用数组进行操作,但是对于数的重复相加就不知道该怎样写了。
2013-05-12 17:19
apull
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:三体星系
等 级:版主
威 望:216
帖 子:1506
专家分:9241
注 册:2010-3-16
收藏
得分:5 
注释掉的输出可以帮助跟踪运行情况。
程序代码:
#include "stdio.h"
#include <stdlib.h>
#include <string.h>

#define MAX 10

int num[MAX];

int readNum()
{
    int n,i;
    printf("求回文数\n输入要测试的数字个数:");
    scanf("%d", &n);

    printf("输入%d个要测试的数字(12-100):\n",n);
    for(i=0;i<n;i++)
        scanf("%d",&num[i]);

//    for(i=0;i<n;i++)
//        printf("%d ", num[i]);
//    printf("\n");
    return n;    
}

int intrev(int n)
{
    char cnum[10];
    int result;

    itoa(n,cnum,10);
    strrev(cnum);
    result = atoi(cnum);

    //printf("%d -> %d\n",n,result);
    return result;
}

int huiwen(int n)
{
    char cnum[10],cnum2[10];
    int slen,i;
    slen = 0;

    itoa(n,cnum,10);
    itoa(n,cnum2,10);
    strrev(cnum2);

    slen = strlen(cnum);
    for(i=0;i < (slen/2);i++)
    {
        if(cnum[i] != cnum2[i]) return 0;
    }
    return 1;
}

int sum(int n, int count)
{
    int rev,s;

    count++;
    rev = intrev(n);
    s = n + rev;

    //printf("%d + %d = %d, count:%d\n",n,rev,s,count);

    if(huiwen(s)) return count;
    
    if(count > 80)
    {
        count = 0;
        return 0;
    }
    
    return sum(s,count);
}

int main()
{
    int nums,i,count;

    nums = readNum();

    for (i=0;i<nums;i++)
    {
        count = 0;
        count = sum(num[i],count);
        printf("%d\n",count);
    }
    return 0;
}

2013-05-12 22:12
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:5 
核心比较:int huiwen(int n)
{
    char cnum[10],cnum2[10];
    int slen,i;
    slen = 0;

    itoa(n,cnum,10);
    itoa(n,cnum2,10);
    strrev(cnum2);

    slen = strlen(cnum);
    for(i=0;i < (slen/2);i++)
    {
        if(cnum[i] != cnum2[i]) return 0;
    }
    return 1;
}

int

Maybe
2013-05-13 09:55
快速回复:回文数 C语言求解
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015936 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved