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

本题要求实现一个求整数的逆序数的简单函数。

函数接口定义:

int reverse( int number );

其中函数reverse须返回用户传入的整型number的逆序数。

裁判测试程序样例:

#include 

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;
}

结果通过测试
【C语言】使用函数输出一个整数的逆序数_第1张图片
也许本来不需要这么复杂,关键在于题目给的函数不能用指针输出数组,而且不能用void这样没有返回值的函数。

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

你可能感兴趣的:(C语言经典练习,c语言,数据结构)