統計一個整型數字位數,逆序、正序輸出
阿新 • • 發佈:2018-11-11
題目要求:輸入一個n位的整型數字,分別輸出其位數、順序輸出、逆序輸出。
一、 求位數
- 基本思路:每次丟棄數字的個位數字,同時定義一個計算器count,初始化化為零來記錄個位數字丟棄的次數,每丟棄一次,計數器加一。其中,丟棄的次數即計算器最終的值就是這個數字的位數。例如:12345,需要丟棄五次,計數器count最終值為5,即12345的位數為5。
- 具體操作見下表:(對數字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迴圈,此迴圈可以保證至少執行一次。
二、 逆序輸出
- 基本思路:將第一問中丟棄的個位數字在丟棄前輸出一下即可。例如:對於整數12345,每次將個位數字丟棄前列印一下,便可得到逆序輸出序列“5、4、3、2、1”。
- 具體操作見下表:(對數字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;
}