## 给一个n位的正整数,要求:(1)求出他是几位数; (2)分别输出每一位数字; (3)按逆序输出给位数字,例如原数为321,应输出123。

给一个n位的正整数,要求:(1)求出他是几位数; (2)分别输出每一位数字; (3)按逆序输出给位数字,例如原数为321,应输出123。

(1)对于一个n位正整数,要求出他是几位数,只需定义一个变量count存储这个数的位数,初始化count为0,利用while循环对整数n整除10,整除一次count加一,当n整除10为0时循环结束,函数返回值为整数位数count;
以上针对的是当n为正整数时,当n为一个整数时,分三种情况:整数、负数和0。当n为负数时,只需增加一个if语句进行判断,使n转化为正整数,然后进行正整数求位数;n为0时直接返回1即可;
代码实现如下:

int  Show(int n)
{
 int count=0; //存储n的位数 
 if(n<0) n=-n; //负数转换为正数再求位数 
 if(n==0) return 1; //n为0是直接返回位数为1 
 while(n!=0) //对正整数求位数 
 {
  n/=10;
  count++;
 }
 return count;
}

(2)要输出n的每一位数字,需要引用前面的求位数函数,判断他是几位数,方便判断从哪位开始输出,然后依次求出他的每一位数字并输出。先定义变量i存放n的位数,再定义一个变量a存放10^i-1,用while循环:1、对n对a整除,求出每个位数的数字并输出;2、n对a取余剔除最高位数字;3、a/=10为下趟循环做准备。
以上是针对当a为正整数时,当n为0或负数时方法和上面的方法类似,在此就不再赘述。
代码实现如下:

void Show1(int n)
{
 int i=Show(n); //存放n的位数 
 int a=pow(10,i-1); //存放最高位的10的整数次幂求每位数字 
 if(n==0) //n为0时输出0 
 {
  printf("0\n");
 }
 if(n<0) //n为负数时先输出负号后再输出每位数字 
 {
  printf("-");
  n=-n;
 }
 while(n!=0) //输出每位数字 
 {
  printf("%d ",n/a);
  n%=a;
  a/=10;
 }
} 

注:不用a存放pow(10,i-1)而直接使用【n%=pow(10,i-1);i–;】时,会发生数据类型不匹配的错误。

(3)按逆序输出给位数字,例如原数为321,应输出123。输出n的每位数字只需利用while循环对n%10并输出,然后n/=10为下趟循环准备,n=0时循环结束。
当n为0或负数时和以上方法类似。
代码实现如下:`

void Show2(int n)
{
 if(n==0) //n为0时输出0 
 {
  printf("0\n");
 }
 if(n<0) //n为负数时先输出负号后再输出每位数字 
 {
  printf("-");
  n=-n;
 }
 while(n!=0) //输出每位数字
 {
  printf("%d ",n%10);
  n/=10;
 }
} 

主函数:

int main()
{
 printf("%d\n",Show(123456));	//统计位数
 Show1(654123);	//顺序输出每位数字
 Show2(654321);	//逆序输出每位数字
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_200_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值