解题思路:
定义多个函数,分别处理遇到的问题,用户输入的位数,数字反向相加,判断同文数。
用数组去接收用户输入的第二个数会让后面的计算起来简单很多。
参考代码:
#include<stdio.h> #include<math.h> #include <string.h> #include <stdlib.h> int stod(char s[],int a[]); int plus(int a[],int n,int m); int check(int a[],int n); int p; char s[1000]; int c[1000]; main() { int n,i; scanf("%d",&p); //接收进制 scanf("%s",s); //用数组接收用户输入的第一个数 n=stod(s,c); //判断用户输入了几位数,并传给n for(i=0;i<30;i++) { n=plus(c,n,p); //相加 if(check(c,n)==1) //判断是否为回文数 { printf("STEP=%d\n",i+1); break; } } if(i>=30) printf("Impossible!\n"); } int stod(char s[],int a[]) //统计位数 { int i; //判断用户输入的为几位数的数字 for(i=0;s[i]!='\0';i++) if(s[i]>='A'&&s[i]<='F') //10到16进制数 a[i]=10+s[i]-'A'; //给数组c赋值 else //2到10进制数 a[i]=s[i]-'0'; return i; //返回位数给n } int plus(int a[],int n,int m) //计算a=a+a反 { int *b,i,j,k; b=(int *)malloc(sizeof(int)*1001);//开辟空间 for(i=0;i<n;i++) b[n-1-i]=a[i]; //把a反过来给b k=0; for(i=0;i<n;i++) { a[i]=a[i]+b[i]+k; k=a[i]/m; a[i]=a[i]%m; } if(k>0) a[n++]=k; free(b); return n; } int check(int a[],int n) //判断a是否是回文 { int i,j; i=0; j=n-1; while(i<j&&a[i]==a[j]) { i++; j--; } return i>=j; }
看看大家还有什么不懂的请在下方评论区留言
0.0分
10 人评分
int check(int a[],int n) //判断a是否是回文 大佬这个返回的值是什么
dream 2019-08-20 15:43:40 |
返回的还是位数,若是最高位有进位,位数会加1
思路很清晰,代码也很整洁,很棒!我一下就看懂了,谢谢小方。我要向你学习
Mister-小方 2017-08-21 14:22:16 |
这么讲我就有点受宠若惊了
Langzihao. 2017-08-21 15:40:57 |
@1104986125 我可是说的大实话呢~
C语言程序设计教程(第三版)课后习题6.11 (C语言代码)浏览:558 |
C语言程序设计教程(第三版)课后习题8.4 (C语言代码)浏览:625 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:882 |
矩形面积交 (C++代码)浏览:1200 |
C语言程序设计教程(第三版)课后习题12.1 (C语言代码)浏览:682 |
C语言程序设计教程(第三版)课后习题8.5 (C语言代码)浏览:707 |
快速排序算法1浏览:993 |
1005答案错误为什么浏览:1986 |
很简单,,题解1041:C语言程序设计教程(第三版)课后习题9.8 (C语言代码)浏览:609 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:555 |