关于C语言如何处理数字(给一个不多于5位的正整数,要求:1.求它是几位数;2.逆序打印出各位数字;3.正序打印出各位数字。)

例题:

给一个不多于5位的正整数,要求:1.求它是几位数;2.逆序打印出各位数字;3.正序打印出各位数字。

前提说明: 从题中我们可以看出题目中对整数的位数已经限制为5位,我们在这里先不管这个限制,无论输入什么数字都将其按照后面的问题输出

1.求它是几位数?

我们平时在观察到一个数字的时候,要得到其位数我们会选择直接数出来,但计算机并不能拥有人类直接数数的功能。
那计算机如何实现呢? 在这里我们先举一个栗子:
随机数 : 12345
实现 : 我们知道整型变量之间的除法结果只保留个位,那么我们可以用循环体不断让这个数字除以10,并创建一个整形变量来进行记录除以10的次数。 (假设记录变量为count)
Start—>12345/10 = 1234,count = 1 —> 1234/10 = 123,count = 2 —> 123/10 = 12,count = 3 —> 12/10 = 1,count = 4 —> 1/10 = 0 , count=5 —> end

代码实现

int GetFigures(int n)        //计算数字位数的函数
{
	int count = 0;    //将记录数字除以10的次数的整型变量进行初始化
	while(n)
	{
		n/=10;
		count++; 
	}
	return count;     //返回次数即位数
}

2.逆序打印出各位数字

我们依旧用第一个栗子的数字12345
理解 : 其实相当于将数字的末尾位上的数字不断打印出去,也可以理解成将末尾数字丢出去
实现 : 我们用循环使数字与10取余将其末尾数字得出后输出,然后我们可以再用第一题的算法将该数字的末尾数去掉,不断循环,最终实现逆序打印
Start—>12345%10 = 5,12345/10 = 1234 —> 1234%10 = 4,1234/10 = 123 —> 123%10 = 3,123/10 = 12 —> 12%10 = 2,12/10 = 1 —>1%10 = 1, 1/10 = 0 —> end

代码实现

void PrintReverse(int n)
{
	do
	{
		int count1 = n;         //将n存入进行取余的变量count1中
		count1%=10;             //进行取余
		n/=10;                  //进行除法
		printf("%d ",count1);   //打印末尾数字
	}while(n);
	printf("\n");
}

3.正序打印出各位数字

理解:正序输出与逆序有一定的相似,但正序的不同之处在于正序得先输出最左边位上的数字,而要得到最左边位上的数字,所以我们要将数字除以10^(该数的位数–1)
实现 : 先将该数除以10^(该数的位数–1)的结果存入建立的变量中后 ,使该数和10^(该数的位数–1)取余 得到新的数字,打印变量,之后便不断循环这一过程
(PS:完全可以在第二步用数组存储逆序的数字,再将数组逆输出便是正序)
Start—>12345/10^(5–1) = 1,12345%10^(5–1) = 2345 —>2345/10^(4–1) = 2,2345%10^(4–1) = 345 —> 345/10^(3–1) = 3,345%10^(3–1) = 45 —> 45/10^(2–1) = 4,45%10^(2–1) = 5 —>5/10^(1–1) = 5,5%10^(1–1) = 0 —> end

代码实现

void PrintOrder(int n)
{
	int tmp1 = (int)pow(10.0,GetFigures(n)-1);         //将10^(该数的位数-1)存入变量tmp1
	do
	{
		printf("%d ",n/tmp1);         //打印首位数字
		 n%=tmp1;                     //数字取余
		 tmp1/=10;                    //调整10^(该数的位数-1)的大小
	}while(n!=0);
	printf("\n");
}

PS:本人学习不久,如果有什么不对的地方希望各位大佬指出,在这里给各位大佬磕头了 ~duang duang duang

最后给各位呈上总代码

总代码:

#include  <stdio.h>
#include <math.h>

int GetFigures(int n)        //计算数字位数的函数
{
	int count = 0;    //将记录数字除以10的次数的整型变量进行初始化
	while(n)
	{
		n/=10;
		count++; 
	}
	return count;     //返回次数即位数
}

void PrintReverse(int n)
{
	do
	{
		int count1 = n;         //将n存入进行取余的变量count1中
		count1%=10;             //进行取余
		n/=10;                  //进行除法
		printf("%d ",count1);   //打印末尾数字
	}while(n);
	printf("\n");
}

void PrintOrder(int n)
{
	int tmp1 = (int)pow(10.0,GetFigures(n)-1);         //将10^(该数的位数-1)存入变量tmp1
	do
	{
		printf("%d ",n/tmp1);         //打印首位数字
		 n%=tmp1;                     //数字取余
		 tmp1/=10;                    //调整10^(该数的位数-1)的大小
	}while(n!=0);
	printf("\n");
}

int main()
{
	/*限制位数
	int n;
	do
	{
		scanf("%d",&n);
	}while(n > 100000);
	*/
	printf("%d\n",GetFigures(n));     //打印位数
	PrintReverse(n);                  //调用逆序打印函数
	PrintOrder(n);                    //调用正序打印函数
	return 0;
}
发布了18 篇原创文章 · 获赞 0 · 访问量 691

猜你喜欢

转载自blog.csdn.net/wfea_lff/article/details/93664132