欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数字处理

程序员文章站 2022-03-22 21:45:35
...

     在该篇文章中,我将对近期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语言数字处理部分的总结,欢迎各位同仁的指正。