匿名用户
1级
2014-11-18 回答
#include
#include
#include
intmain()
{
charstr[10]={0};
inta,b,num,i,j;
gets(str);
num=strlen(str);
a=atoi(str);
if(num%2==0)
{
if(str[num/2-1]
str[num/2-1]=str[num/2-1]+1;
for(i=0,j=num-1;i<=num/2;i++,j--)
{
str[j]=str[i];//2443算出来变2442,错误
}
if(str[num/2-1]
//str[num/2]=str[num/2]+1;
for(i=0,j=num-1;i<=num/2;i++,j--)
{
str[j]=str[i];
}
}
if(num%2!=0)
{
str[num/2]=str[num/2]+1;//不需要上来就+1,未必有这个必要,
//比如231,应是232,不是242
for(i=0,j=num-1;i<=num/2;i++,j--)
{
str[j]=str[i];
}
}
b=atoi(str);
printf("%d,%d,%d\n",a,b,b-a);
return0;
}
===============================================
按照你的算法,我写了个实现:
#include
#include
#include
intmain()
{
charstr[10]={0};
inta,b,num,i,j;
intindex;
do{
gets(str);
num=strlen(str);//如果直接输入回车,str是空字符串,下面的计算无法进行
}while(num==0);
a=atoi(str);
index=num/2-1;
/*找出离数字“中心”最近的第一个不对称的位置*/
while(index>=0&&str[index]==str[num-index-1])
{
index--;
}
if(index>=0)
{
if(str[index]
{
intindex2=num/2;
/*如果是9,不能再累加了,必须往高位找*/
while(str[index2]=='9')
{
index2--;
}
/*由于str[index]
*所以index2肯定能找到,不会出现index2<0的情形
*/
str[index2]=str[index2]+1;
str[num-index2-1]=str[index2];
/*高位累加后,中间位置可以清零,数会比较小*/
for(i=index2+1;i
str[i]='0';
}
}
for(i=0,j=num-1;i<=index;i++,j--)
{
str[j]=str[i];
}
}
b=atoi(str);
printf("%d,%d,%d\n",a,b,b-a);
return0;
}