讨论 / 回文数c语言
r1529087768 2018-04-09 03:35:18
点我顶贴 收藏 删除
#include<stdio.h>

#include<string.h>

int i, n, tep = 0;

void change(char m[])

{

for(i = strlen(m) / 2 - 1; i >= 0; i--)if(m[i] != m[strlen(m)-1 - i])break;

if(i == -1 || tep > 30)return;

char tmp, tmp2, m2[10001], m3[10001];

strcpy(m2, m);

for(i = strlen(m) - 1; i > (strlen(m) - 1) / 2; i--)

{

tmp = m[i];

m[i] = m[strlen(m) - 1 - i];

m[strlen(m) - 1 - i] = tmp;

}

tmp = 0;

for(i = strlen(m) - 1; i >= 0; i--)

{

if(n == 16 && m[i] >= 'A')m[i] -= 7;

if(n == 16 && m2[i] >= 'A')m2[i] -= 7;

m3[i] = (m[i] - '0' + m2[i] - '0' + tmp) % n + '0';

if(m[i] - '0' + m2[i] - '0' + tmp >= n)tmp = 1;

else tmp = 0;

}

if(tmp == 1)

{

for(i = strlen(m) - 1; i >= 0; i--)m3[i + 1] = m3[i];

m3[0] = '1';

}

tep++;

change(m3);

}

int main()

{

char m[10001], m3[10001];

scanf("%d%s", &n, &m);

change(m);

if(tep <= 30)printf("%d", tep);

else printf("Impossible");

return 0;

}

查看更多回复
提交回复