数字处理
在该篇文章中,我将对近期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>
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);
}
在测试过程中,同样遇到一个问题就是当输入的数为负数时,输出n的每位上的数字前都有一个负号,所以可在函数中添加一个判断函数,即:
if(n < 0)
{
printf("-");
n = -n;
}
三、数字的逆序输出
即任意给出一个数字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);
}
以上就是我对近期学习的C语言数字处理部分的总结,欢迎各位同仁的指正。
上一篇: 正序输出每一位数
下一篇: ionic对原始数据进行倒序,正序排列