【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;
}
结果通过测试
也许本来不需要这么复杂,关键在于题目给的函数不能用指针输出数组,而且不能用void这样没有返回值的函数。
欢迎采纳,如果有更好的方式欢迎批评指正!!
推荐阅读
-
c语言:3种方法实现输出一个整数的每一位。
-
c语言:sizeof的使用,其不是函数,是一个操作符关键字,定义一个数组arr,输出arr和&arr的区别
-
【C语言】输入一个整数,输出该数二进制表示中1的个数(三种方法)
-
c++使用bitset输出一个整数的二进制表示
-
使用C语言编写程序,计算N个整数的和(随机输入一个值,例如1到100之间所有整数的和)
-
C语言输出int型整数的二进制值(使用结构体位域)
-
[C语言][面试题]使用main函数的参数,实现一个整数计算机,程序可以接受三个参数
-
c语言:输出一个静态局部变量只在函数内部有效的例子
-
c语言:使用main函数的参数,实现一个整数计算器
-
浙大版《C语言程序设计(第3版)》题目集 习题6-6 使用函数输出一个整数的逆序数 (20分)