本题要求实现一个求整数的逆序数的简单函数。
函数接口定义:
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这样没有返回值的函数。
欢迎采纳,如果有更好的方式欢迎批评指正!!