正整数求位数and求顺、逆序位数

《c语言程序设计基础》前四章学习完毕,来做一道经典例题。
题目要求:
给出一个int整形正整数,要求:
1.求出它是几位数字 
2.按照逆序分别输出每位数字,例如123输出为321
3.按正序输出每位数字

分析:
一:求几位数 设置一个计数器count
1234 -> 123 去掉一个4,count+1
123 -> 12   去掉一个3,count+1
12 ->  1    去掉一个2,count+1

1 -> 空     去掉一个1,count+1

而怎么去掉这个4、3、2、1呢?
int整形除以10,可以去掉个位。即:1234/10 = 123
所以代码如下:

程序出现错误,Figure(0)应该输出的结果为1,结果代码中没有考虑到n=0的情况。所以我们需要添加一条if()语句。

代码如下:

if(n == 0)
{
count = 1;

}

二:按照逆序分别输出每一位数字,123则输出321.

这里请看一中的分析,我们分别去掉了4、3、2、1,那么正好是1234的逆序输出。

4:1234求10的余数,得到4

123:1234除以10.得到123

所以代码如下:

 

三:按正序输出每位数字

还按照一中的思路:

1234 ->1,从1234中挑出一个1,需要:1234除以1000,1000 = 10^3 ,3 = 4 - 1,4为位数。

所以,1 = 1234/(10^(count - 1));

          1234 ->234; 234 = 1234 - 1000;

234 -> 2 ,从234中挑出2····· 

代码如下:

 

 

最后贴一下源代码:

 

#include<stdio.h>

 

int Figure(int n)//定义函数:求出n的位数
{
int count = 0;   //初始化计数器,为0;
if(n == 0)     //当n = 0时,这里所有的n = 0是都单独拿出来讨论。
{
count = 1;
}

while(n != 0)
{
count++;
n /= 10;
}
return count;
}

void NIeverynum(int n)  //定义函数:逆序输出每一位数字
{
int wei;  //逆序的每一位数字
printf("逆序输出结果为:");

if(n == 0)  //同样单独讨论n = 0时,下面再出现时不再注释
{
wei = 0;
printf("%d ",wei);
}
while(n != 0)
{
wei = n % 10;  //得到个位的数字
n /= 10;          //n变成删除个位的数字
printf("%d ",wei);
}
printf("\n");
}

void Shuneverynum(int n)     //定义函数:顺序输出每一位数字
{
int swei;                        //顺序的每一位数字

int count = Figure(n);    //求n是几位数字,调用Figure函数,Figure函数的返回值为位数;

int power = 1;               //这里用一个for语句,求得1 = 1234/(10^count - 1)中的(10^(count - 1))
for(int i = 1;i < count;i++)
{
power *= 10;          //即power = 10^(count - 1)
}
printf("顺序输出结果为:");

if(n == 0)                         //同上例
{
swei = 0;
printf("%d ",swei);
}
while(n != 0)
{
swei = n / power;    //顺序的位 = 1234 除以1000
printf("%d ",swei);   
n -= swei * power;   //例如:123 = 1234 - 1*1000
power /= 10;           //100 = 1000 除以 10  然后循环输出顺序位数字
}
printf("\n");
}
int main()
{
printf("%d\n",Figure(123456));
printf("%d\n",Figure(1));
printf("%d\n",Figure(0));

NIeverynum(1234567);
Shuneverynum(1234567);

return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值