嗬嗬,老兄,你没明白我的意思或者是我没有说清楚。程序我当然会,但是我想力求完美。
我一直在想是否有更简单的方法。
但是没有想到,其实程序我早就写好了。不过是用c写的,但并不是很满意。所以才求救
与大家。
源程序如下:
#define MaxN 40
#define MaxT 30
#include "string.h"
#include "math.h"
#include "stdio.h"
main()
{
void inputstr(char a[]);
int AddOnce(char a[]);
int judge(char a[],int arr);
void outputresult(int t,int tf,char a[]);
int times,bf,carry;
char str[MaxN];
times=0;bf=0;
inputstr(str);
if((judge(str,1)==1))
{
outputresult(0,1,str);
return;
}
for(times=1;times<=MaxT;times++)
{
carry=AddOnce(str);
if(judge(str,carry)==1)break;
}
if(times>=MaxT)times=MaxT;
bf=judge(str,1);
outputresult(times,bf,str);
}
void inputstr(char a[])
{ int i,inputerror;
printf("Please input a number between 1 and 1E20):");
do
{
inputerror=0;
scanf("%s",a);
for(i=0;i<=strlen(a)-1;i++)
{
if(a<'0'||a>'9')
{
inputerror=1;
for(i=0;i<=MaxN-1;i++)a='/0';
printf("Input Error.Try again:");
break;
}else
if(a[0]=='0')
{
printf("Input Error.Try again:");
inputerror=1;
}
if(inputerror==1)break;
}
} while(inputerror==1);
}
int AddOnce(char a[])
{ int i,length,car;
length=strlen(a);
car=0;
for(i=0;i<=(length-1)/2;i++)
{
a=a+a[length-1-i]-'0';
if(a>'9')car=1;
}
for(i=0;i<=(length-1)/2;i++)
a[length-1-i]=a;
/*gui zheng chang zheng shu*/
if(car==0)return(car);
a[length]='0';
for(i=0;i<=length-1;i++)
{
if(a>'9')
{
a-=10;
a[i+1]+=1;
}
}
if(a[length]=='0')a[length]='/0';
a[length+1]='/0';
return(car);
}
int judge(char a[],int car)
{
int length,i,mid;
length=strlen(a);
if(length<3)return(0);
if(car==0)return(1);
for(i=0;i<=(length-1)/2;i++)
{
mid=length-1-i;
if(a!=a[mid])return(0);
}
return(1);
}
void outputresult(int times,int bf,char a[])
{ int i,length;
length=strlen(a);
if(bf==1)
{
printf("Times:%d/nPalindrome Number:",times);
for(i=length-1;i>=0;i--)printf("%c",a);
printf("/n");
}else
printf("No Palindrome Number!/n");
}
运行:
Please input a number between 1 and 1E20):9987064
Times:29
Palindrome Number:1156661378731666511
不过呢,还是感谢了,浪费了你宝贵的时间,谢谢!