常见数字处理问题
C语言中,数字处理问题是一个常见且很重要的问题,其主要涉及以下几个问题:
1.统计数字n为几位数;
2.顺序输出每一位数字;
3.逆序输出每一位数字;
这类问题的算法思想为:通过整除(/)或者取余(%)的方式,获取最高和最低位,以及丢弃最高位和最低位,以下为具体方法:
问题1:统计数字n为几位数
算法思想:定义一个变量temp作为计数器,将其赋值为零。得到并输出n的最低位数字,然后舍去最低位,同时计数器temp ++1,重复以上步骤,直到n==0为止。
源代码:
int Count(int n) //函数判断范围过大时,可将n的类型改为long long型
{
if(n == 0)
return 1;
int temp = 0;
while (n != 0)
{
temp++;
n /= 10; //舍弃最低位
}
return temp;
}
问题2:顺序输出n的每一位数字
算法思想:首先得到最高位,然后将最高位输出,再丢弃最高位。以上步骤重复执行,直到n为0结束,这里需要注意n==0的特殊情况。得到数字最高位的方法是该函数重点,需要借助问题1中求Count函数求出n为几位数。
源代码
void Show(int n)
{
if(n == 0) //n为0时,函数直接输出0,并提前结束
{
printf("0\n");
return;
}
if(n < 0) //n为负数情况
{
printf("-");
n = -n;
}
int temp = Count(n); //借助Count函数得到n是几位数
int power = (int) pow (10.0,temp-1); //power为获取的第一个除数
for(int i =0;i<temp;i++)
{
printf("%d",n/power); //输出最高位
n %= power; //丢弃最高位
power /= 10;
}
printf ("\n");
}
问题3:逆序输出n的每一位数字
算法思想:同问题2做法相似,都是得到一个数字输出后丢弃,不同在于逆序是通过获取最低位,输出最低位,再丢弃最低位所得到的。以上步骤重复执行,直到n==0,当然这里也要注意n取0的特殊情况。
源代码
void ReverseShow(int n)
{
if(n == 0)
{
printf("0");
return ; //n==0,提前结束该函数
}
if(n < 0) //n为负数情况
{
printf("-");
n = -n;
}
while(n != 0)
{
printf("%d",n%10); //输出最低位
n /= 10; //丢弃最低位
}
printf("\n");
}