解题思路: 1,考虑到十进制以上,用字符串数组储存所输入的数字。
2,编写change函数将字符串数组的元素全部转化成数字,再储存在全局数组a中;
3,用len 记录数组a的长度,便于访问;
4,add函数用于逆转得到一个新数字与原来的数字相加,得到的新数字储存在a中;
5,fun函数用于判断回文数;
6,主函数用while循环判断
注意事项:len是会变的;最后一次k可以为1
参考代码:
#include<stdio.h>
#include<string.h>
int len;//记录数组a长度
int a[1000];
void change(char b[])//将数组元素全部化为数字并储存在a中
{
int i = 0;
while(b[i])
{
if(b[i]>='A'&&b[i] <= 'F')//10进制以上的转化
a[i] = b[i] - 'A' + 10;
else
a[i] = b[i] - '0';
++i;
}
len = i;//记录最初数组a的长度
//printf("%d\n\n",len);
}
void add(int b[],int m)//将数组逆序存放后相加并储存在数组b中
{
int i,b1[1000],k=0;
for(i = 0;i < len;++i)
b1[len-1-i] = b[i];
for(i = 0;i < len;++i)
{
b[i] = b1[i]+b[i]+k;//各个位相加,k为上一位的溢出值
k = b[i]/m;//有溢出则k = 1;else k = 0;
b[i] = b[i]%m;//确保b[i]没有溢出
}
if(k>0)//如果k>0,则下一位为k(也就是1)
b[len++] = k;
//printf("%d\n",len);
}
int fun(int b[])//判断回文数
{
int i;
for(i = 0;i < len/2;++i)
if(b[i]!=b[len-1-i])
return 0;
return 1;
}
int main()
{
int n,t = 0;
char m[1000];
scanf("%d",&n);scanf("%s",m);
change(m);
while(!fun(a)&&t<=30){
add(a,n);//不满足条件则调用add函数得到新的数字
++t;
}
if(t<=30) printf("STEP=%d",t);
else printf("Impossible!");
}
0.0分
0 人评分
校门外的树 (C语言代码)浏览:733 |
完数 (C语言代码)浏览:757 |
1014题解浏览:524 |
1050题解(结构体数组与结构体指针的使用)浏览:1216 |
永远的丰碑 (C语言代码)浏览:608 |
模拟计算器 (C语言代码)浏览:2366 |
数列排序 (C语言代码)浏览:674 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:487 |
母牛的故事 (C语言代码)浏览:495 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:1207 |