C语言中关于数字的处理:"得到"与"丢弃"对应位置上的方法以及正序输出每一位数字和逆序输出每一位数字

今天我来讲解一下C语言中有关于于处理数字的一些问题,有“丢弃 “和“ 得到“对应位上的数字的方法,常常可以用来解决一些顺序输出每个数字,逆序输出每个数字,判断数字位数等问题。

第一个问题:判断数字位数

 

 即任意给出一个数字n,要求统计输出n的位数。

   思路分析: 该问题的处理方法有两种,即”丢个位“与”丢高位“。”丢个位“即对n进行除以10操作,并将其赋值给下一次除以10操作的n,每进行一次操作,计数器加1,直至n为0.统计输出计数器的个数即为n的位数(例:n=123,则n的”丢个位“过程为:123→12(123/10)→1(12/10)→0(1/10));”丢高位“即对n要进行取余操作,每次取余计数器加1,但每次取余时的除数不同(例:n=123,则n的”丢高位位“过程为:123→23(123%100)→3(23%10)→0(3%1)).

    鉴于以上分析,我将在此展示“丢个位”的C语言代码,如下所示:

#include <stdio.h>  
#include <math.h>  
int Figure(int n)  
{  
    int count = 0;  
      
    do  
    {  
        count++;  
        n /=10;  
    }while(n != 0);  
  
    return count;  
}  
int main()  
{  
        //测试用例  
    printf("%d\n",Figure(0));  
    printf("%d\n",Figure(1));  
    printf("%d\n",Figure(12));  
    printf("%d\n",Figure(123456789));  
    printf("%d\n",Figure(-1));  
    printf("%d\n",Figure(-123456789));  

}  

     在以上代码实现过程中,我也试图用过while语句实现,但是未通过测试,在我使用测试用例‘0’进行测试的时候发现结果为‘0’,显然有误,这时要想到while和do-while的区别,do-while语句至少执行一次。

第二个问题:逆序输出每一位数字

即任意给出一个数字n,要求逆序输出各位上的数字

思路:得到个位数字,依次打印;

具体实现代码如下:

#include <stdio.h>  
#include <math.h>  
//逆序输出n的每一位  
void PrintReverse(int n)  
{  
    if(n < 0)   
    {  
        printf("-");  
        n = -n;  
    }  
    do  
    {  
        printf("%d ",n%10);  
        n /= 10;  
    }while(n != 0);  
    printf("\n");  
}  
  
int main()  
{  
    //测试用例   
    PrintReverse(123456789);  
    PrintReverse(-123456789);  
    PrintReverse(0);  
}  

第三个问题:顺序输出每一位数字

 

 即任意给出一个数字n,要求正序输出各位上的数字。

  结合数字的位数统计,在此可通过位数统计函数的调用(注意接收并进行赋值)进行代码实现,

#include <stdio.h>  
#include <math.h>  
int Figure(int n)  
{  
    int count = 0;  
      
    do  
    {  
        count++;  
        n /=10;  
    }while(n != 0);  
  
    return count;  
}  
//顺序输出n的每位数字  
void PrintOrder(int n)  
{  
    int count = Figure(n);  
    int power = 1;  
    for(int i=0;i<count-1;i++)  
    {  
        power *= 10;  
    }  
  
    do  
    {  
        printf("%d ",n/power);  
        n %= power;  
        power /= 10;  
    }while(n != 0);  
      
    printf("\n");  
}  
int main()  
{  
    //测试用例   
    PrintOrder(123456789);  
    PrintOrder(-123456789);  
    PrintOrder(0);  

}  

以上就是我对近期学习的C语言数字处理部分的总结,欢迎各位同仁的指正。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值