王道OJ题作业答案-作业7
1、问题描述
Description:输入一个整型数,判断是否是对称数,如果是,输出yes,否则输出no,不用考虑这个整型数过大,int类型存不下,不用考虑负值;
例如 12321是对称数,输出yes,124421是对称数,输出yes,1231不是对称数,输出no
Input:一个整型数
Output:输出是yes,或者no
Sample Input 1:12321 Sample Output 1:yes
Sample Input 2:1231 Sample Output 2:no
2、思路:所谓对称数,就是逆置这个数后,得到的数和原数相等。
①、可以用循环把每一位取出来,然后进行逆置操作(*10),最后比较两个数是否相等;
②、可以使用循环取出每一位,然后用数组进行比较每一位。
3、代码:
①、while循环实现
1 #include<stdio.h> 2 int main() 3 { 4 int a,b=0,backup; 5 scanf("%d",&a); 6 backup=a; 7 while(a) 8 { 9 b=b*10+a%10; 10 a=a/10; 11 } 12 if(b==backup) 13 { 14 printf("yes\n"); 15 } 16 else 17 { 18 printf("no\n"); 19 } 20 return 0; 21 }
②、数组实现
1 #include<stdio.h> 2 int main() 3 { 4 int a,backup,count=0,i=0,j=0; 5 int comp=0,yes=0;//comp作为临时定义的变量,来比较数组b和c,yes表示匹配成功的次数 6 scanf("%d",&a); 7 backup=a; 8 //算出输入的数有几位,从而进一步定义数组 9 while(a) 10 { 11 a=a/10; 12 count++; 13 } 14 //因为角标是从0开始,所以j的最大值应该比位数少1 15 j=count-1; 16 //printf("%d",count); 17 int b[count],c[count]; 18 while(backup) 19 { 20 b[i]=backup%10;//取出原数的每一位,第一位存在下标为0的位置 21 c[j]=backup%10;//取出原数每一位,最后一位存在下标为0的位置 22 backup=backup/10; 23 //printf("b[%d]=%-3d\n",i,b[i]); 24 i++; 25 //printf("c[%d]=%-3d\n",j,c[j]); 26 j--; 27 } 28 for(comp=0;comp<count;comp++) 29 { 30 if(b[comp]==c[comp]) 31 { 32 yes++;//每一位匹配成功的次数 33 } 34 } 35 if(yes==count)//如果每一位都匹配成功,那么就是对称数 36 { 37 printf("yes"); 38 } 39 else 40 { 41 printf("no"); 42 } 43 }
4、注意:笔者此处的数组表达较为繁琐,应该还有更加简洁的表达,不足请多多包涵。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」