今天我来讲解一下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语言数字处理部分的总结,欢迎各位同仁的指正。