c语言程序设计对称数,c语言程序设计--对称数

匿名用户

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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值