1. 程式人生 > >統計一個整型數字位數,逆序、正序輸出

統計一個整型數字位數,逆序、正序輸出

題目要求:輸入一個n位的整型數字,分別輸出其位數、順序輸出、逆序輸出。

一、 求位數

  1. 基本思路:每次丟棄數字的個位數字,同時定義一個計算器count,初始化化為零來記錄個位數字丟棄的次數,每丟棄一次,計數器加一。其中,丟棄的次數即計算器最終的值就是這個數字的位數。例如:12345,需要丟棄五次,計數器count最終值為5,即12345的位數為5。
  2. 具體操作見下表:(對數字12345舉例)
數字n 保留丟棄後數字操作 丟棄後數字 count
12345 12345/10 1234 1
1234 1234/10 123 2
123 123/10 12 3
12 12/10 1 4
1 1/10 0 5
操作的總結 count++ n/10 count++

由上圖可知:求一個數的位數可利用迴圈,將數字n/10便可丟棄最後一位,並且將n/10賦給n,帶入下一次迴圈,同時count++。迴圈結束條件為當n等於0時。此時應當考慮當輸入n為0的特殊情況,此情況有兩種解決辦法:
i、用if語句進行判斷,當n等於0時,輸出位數為1。
ii、用do while迴圈,此迴圈可以保證至少執行一次。


二、 逆序輸出

  1. 基本思路:將第一問中丟棄的個位數字在丟棄前輸出一下即可。例如:對於整數12345,每次將個位數字丟棄前列印一下,便可得到逆序輸出序列“5、4、3、2、1”。
  2. 具體操作見下表:(對數字12345舉例)
數字n 丟棄個位操作 丟棄的個位 保留丟棄後數字操作 丟棄後數n
12345 12345%10 5 12345/10 1234
1234 1234%10 4 1234/10 123
123 123%10 3 123/10 12
12 12%10 2 12/10 1
1 1%10 1 1/10 0
操作總結 n%10 printf n/10 n=n/10

由上圖可知:首先利用n%10可得到整數個位數字,接著將其列印,最後利用n/10得到丟棄個位數字後的n,並將其賦給n,帶入下一次迴圈。迴圈結束條件為當n等於0時。基本思路與求位數相似,只是多了利用n%10得到個位數字,並將其列印的操作。

三、 正序輸出
1、首先對於數字12345舉例,尋找規律。

數字n 丟棄第一位操作 第一位數字 保留丟棄後數字操作 丟棄後數n
12345 12345/10000 1 12345%10000 2345
2345 2345/1000 2 1234%1000 345
345 345/100 3 123%100 45
45 45/10 4 12%10 5
5 5/1 5 5%1 0
操作總結 n%10 printf n/10 n=n/10

由上圖可知:首先利用n/( 10^(位數-1) )可得到整數的第一個數字,接著將其列印,最後利用n%( 10^(位數-1) )得到丟棄第一位數字後的n值,並將其賦給n,帶入下一次迴圈。迴圈結束條件為當n等於0時。其中的位數的值,可以通過呼叫求位數的函式。
四、 程式碼實現

int Count(int n)
{
	int tmp = 0;
	do
	{
		tmp++;
		n /=10;
	}while(n != 0)

	return tmp;
}


void PrintReverse(int n)//逆序輸出
{
	while(n != 0)
	{
		printf("%d ",n%10);
		n /= 10;
	}
	printf("\n");
}

void PrintOrder(int n)
{
	int c = Count(n);

	int power = 1;
	for(int i=0;i<c-1;i++)
	{
		power *= 10;
	}

	while(n != 0)
	{
		printf("%d ",n/power);
		n %= power;
		power /= 10;
	}
	printf("\n");
}

int main()
{
	PrintOrder(123456789);
	PrintReverse(123456789);
	printf("%d\n",Count(123456789));
	printf("%d\n",Count(1));
	printf("%d\n",Count(0))*/;

	return 0;
}