回文数

C语言 码拜 8年前 (2016-04-21) 1470次浏览
一个正整数,假如从左向右读(称之为正序数)和从右向左读(称之为倒序数)是一样的,这样的数就叫回文数。
任取一个正整数,假如不是回文数,将该数与他的倒序数相加,若其和不是回文数,则重复上述步骤,一直到获得回文数为止。
例如:
68变成154(68+86),再变成605(154+451),最后变成1111(605+506),而1111是回文数。
于是有数学家提出一个猜想:
不论开始是什么正整数,在经过有限次正序数和倒序数相加的步骤后,都会得到一个回文数。至今为止还不知道这个猜想是对还是错。
现在请你编程序验证之。
Input
每行一个正整数。
Output
对应每个输入,输出一行为变换的过程。
Sample Input
27228
37649
Sample Output
27228–>109500–>115401–>219912
37649–>132322–>355553
Hint
1.输入的数据保证小于2^60
2.每组数据保证最多运算100次
友情提示:WA的同学请仔细阅读提示1和提示2

#include<stdio.h>
long long sum(long long a){
	int t,i=0;
	long long a1=0;
	int c[25]={0};
	while(a){
		c[i]=a%10;
		a/=10;
		i++;
	}
	t=i;
	for(i=0;i<t;i++)
	a1=a1*10+c[i];
	return a1;
}
int main(){
	long long a;
 long long s[100]={0};
	int ta,i;
	while(scanf("%I64d",&a)!=EOF)
	{
		ta=0;
		s[ta]=a;
		while(a!=sum(a))
		{
			a+=sum(a);
			s[++ta]=a;
		}
		for(i=0;i<ta;i++)
          printf("%I64d-->",s[i]);
        printf("%l64d\n",s[ta]);
	}
	return 0;
}

这是本人的代码,ac不了,请高手指点

解决方案

5

引用:
Quote: 引用:

这个可以用

#include<stdio.h>
long sum( long a){
    int t=0,i=0;
    long a1=0;
    int c[25]={0};
    while(a){
        c[i]=a%10;
        a/=10;
        i++;
    }   
    t=i;
    for(i=0;i<t;i++)
    a1=a1*10+c[i];   
    return a1;
}
int main(){
    long a;
	long s[100]={0};
    int ta,i;
    while(scanf("%I64d",&a)!=EOF)
    {
        ta=0;
        s[ta]=a;
        while(a!=sum(a))
        {   
            a+=sum(a);
			ta++;
            s[ta]=a;
        }
        for(i=0;i<ta;i++)
          printf("%I64d-->",s[i]);
		printf("%I64d",s[ta]);   
    }
    return 0;
} 

不行,题目说明输入的数值不超过2^60,long不够吧

你用的什么环境,在vc6.0中是不支持long long类型的

15

大数加法,用栈。什么类型都不可以的

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明回文数
喜欢 (0)
[1034331897@qq.com]
分享 (0)