欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-28 19:39:22
...

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

函数接口定义:

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

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

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