关于c语言中处理数字的方法

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

    例如,要写一个程序来判断一个数字是个几位数: 简单举例,判断1234是个几位数,即可以1234→123→12→1→0,即可判断出是一个4位的数字。具体方法:利用整型的性质,加以循环除10,不断丢弃个位,直接0为止,丢弃各位的次数即可以来表示数字的位数。                                                                                                                                                                        子函数编程:unsigned char GetFigures(int n)
{
unsigned char figures = 0;

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


return figures;

}

 

 

又例如,要将一个数字逆序输出:简单举例,将1234逆序输出,即可以1234→4(得到个位)→123(丢掉个位)→3(得到个位)→12(丢掉个位)→2(得到各位)→1;  得到个位比较简单,即对10取模即可,例1234%10=4 ,即取到各位4;丢弃个位即对10求商即可,例1234/10=123;再利用循环,找到一个个位就打印一个,直到数字到0就结束。                                        子函数程序:void PrintReverse(int n)
{
int temp;


if (0 == n)                                                    /*  n为0                             */
{
printf("0\n");
}


if (n < 0)                                                     /*  n小于0先打印“-”再处理数值      */
{
n = -n;
printf("-");
}


while(n != 0)                      /*  n等于0即按照得到个位,丢弃各位,得到个位即输出一次个位    */
{
temp = n % 10;    
n /= 10;
printf("%d",temp);
}
printf("\n");

}

注:要用具体的测试用例测试三类特殊数值,正整数,负整数,0;正整数不影响,负整数即要根据每位数是否都输出负号来处理符号,0要单独判断。

 

又例如,要将一个数字顺序输出:顺序输出比逆序输出复杂,逆序输出是“取个位得个位“的方法,而顺序输出是要“取高位丢高位”的方法,这就是涉及到取高位和丢高位的方法。例如1234的“取高位,丢高位“:1234/1000=1(取高位)→1234%1000=234(丢高位)→234/100=2(取高位)→234%100=34(丢高位)→......;取丢高位和取丢个位最大的区别在于:1.取丢高位求商和求模的对象要以此下降10倍;2.不知道最高位是多少位(或者说不知道这个数字是个几位数);所以要利用求为数的函数加上循环降10倍的求商求模样对象。             

子函数编程:void PrintOrder(int n)
{
unsigned char figures = GetFigures(n);                         /*  获取n的位数                      */
int power = (int)pow((float)10,(float)figures-1);              /*  获取n最高位数字需要除模的数字    */
int temp;


if (0 == figures)                                              /*  n为0                             */
{
printf("0\n");
}


if (n < 0)                                                     /*  n小于0先打印“-”再处理数值      */
{
n = -n;
printf("-");
}


while(power != 0)
{
temp = n / power;                  
{
n %= power;
power /= 10;
printf("%d",temp);
}
printf("\n");
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值