
【C语言】使用函数输出一个整数的逆序数
本题要求实现一个求整数的逆序数的简单函数。
函数接口定义:
int reverse( int number );其中函数reverse须返回用户传入的整型number的逆序数。
裁判测试程序样例:
#include <stdio.h> int reverse( int number ); int main() { int n; scanf("%d", &n); printf("%d\\n", reverse(n)); return 0; } /* 你的代码将被嵌在这里 */ 输入样例: -12340 输出样例: -4321先给大家一个错误例子:(是一个个输出)
int reverse( int number) { int i,j=0,k,s=0; if(number<0){ number*=(-1); printf("-"); } for(i=1;i<number;i*=10) { k=number/i; s=k%10; if(s!=0) j++; if(j) printf("%d",s); } }这个在函数不放到printf中的情况下是可以输出正确结果的 但问题在于题目给的函数是int型,且函数放在printf中,因此只能返回一个整数答案 (这是我的理解)
令人抓狂的是,实参是int而不是int*,因此也没法用数组。
最终修改如下:
int pow1(int n,int i) /*这是用来求幂*/ { int m=1; for(int k=0;k<i;k++) m*=n; return m; } int reverse( int number) { int i,j,m=0,k,s0=0,s1[10000],e=0; if(number<0){ /*为方便处理忽略负号,放一个哨兵e*/ number*=(-1);e=1; } for(i=1;i<number;i*=10) /*建立一个数组s1,用于存放逆序数*/ { k=number/i; /*i为10的倍数,将k每次缩小10倍取整*/ s0=k%10; /*取k的个位数*/ if(s0!=0){j++;} /*碰到非0数,j为哨兵*/ if(j){s1[m]=s0;m++;} /*将k的个位数压入数组中*/ } s0=0;int n=0; /*重新初始化s0*/ for(i=0;i<m;i++) { n=pow1(10,(m-1-i)); /*经过上面步骤,m-1为数组中元素的个数,pow1(10,(m-1-i)为将其转化成高位*/ s0+=(s1[i]*n); /*计算由高位至低位的整数和*/ } if(e) s0*=(-1); /*哨兵发现负号,为结果安上负号*/ return s0; }结果通过测试 也许本来不需要这么复杂,关键在于题目给的函数不能用指针输出数组,而且不能用void这样没有返回值的函数。
欢迎采纳,如果有更好的方式欢迎批评指正!!
👁️ 阅读量:0
© 版权声明:本文《【C语言】使用函数输出一个整数的逆序数》内容均为本站精心整理或网友自愿分享,如需转载请注明原文出处:https://www.zastudy.cn/wen/1686488875a267640.html。