admin管理员组

文章数量:1794759

【C语言】使用函数输出一个整数的逆序数

【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这样没有返回值的函数。

欢迎采纳,如果有更好的方式欢迎批评指正!!

本文标签: 逆序整数函数语言