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");
}