??人生偉業的建立,不在能知,乃在能行,
??回文數:設n是一任意自然數,若將n的各位數字反向排列所得自然數n1與n相等,則稱n為一回文數,例如,若n=1234321,則稱n為一回文數;但若n=1234567,則n不是回文數,
文章目錄
- 一、如何計算用戶輸入的數是幾位數?
- 二、如何逆序輸出數值?
- 思路1:回圈了幾次?
- 思路2:回圈什么時候終止?
- 三、判斷回文數
- 四、寫在后面
一、如何計算用戶輸入的數是幾位數?
??在做逆序輸出以及判斷回文數題目之前,先做下這道題,如何計算用戶輸入的數是幾位數呢?
??思路:假設用戶輸入的資料是四位數1234,
??我們知道,1234%10=4,我們就取到了用戶輸入數值中末位數字4這個數字,這時候我們就知道用戶輸入的數至少是個位數了(廢話),
??我們還知道,1234/10=123,我們可以利用他把用戶輸入的數值更新,更新之后,猜到沒,我們再繼續走步驟一,如果走得動,我們又知道用戶輸入的數值至少是兩位數了,
??就這樣再更新成12,取得末位數字2,我們就知道用戶輸入數值至少為三位數了,再更新成1,取得末位數字1,我們就知道用戶輸入的數值至少為四位數了這時候1/10=0,完犢子,更新不了了,停止,我們就知道用戶輸入的數值,最終是四位數,
??具體代碼如下:
#include <stdio.h>
int main(void)
{
int number = 0; //用來存放用戶輸入的數值
int count = 0;//用來記錄我們猜測的數值位數,
printf("請輸入一個數,我來判斷你輸入的是幾位數:\n");
scanf("%d", &number);
while (number != 0)//當number/10等于0時
{
number = number / 10;//更新number
count++;//先更新在記錄,先記錄在更新的話記錄的是前一次數值的位數,
}
printf("您所輸入的數是%d位數", count);
return 0;
}
請輸入一個數,我來判斷你輸入的是幾位數:
56654523
您所輸入的數是8位數
二、如何逆序輸出數值?
??做完上一題之后,再看下如何逆序輸出,比如1234逆序輸出為4321
??我們同樣還是知道1234%10==4, 1234/10=123對吧,所以沒問題,按照上一題的邏輯,我們取得用戶輸入數值的末位數字之后對數值進行更新再取末位數字,就可以陸續得到1,2,3,4這四個數字了,
??那么下面我們要思考的就是逆序輸出后的數值和這幾個數字的關系,我們可以發現1234=1X10X10X10+2X10+10+3X10+4,
??當我們第一次取得數字1的時候我們可以得到0X10+1=1——>當我們繼續取數字取到2的時候,我們可以推演到,2X10+1=21——>當我們繼續取數字取到3的時候,我們可以推演到3X10X10X10+12=321——>同理繼續取到數字4,推演到4X10X10X10+321=4321——>繼續取數字,1/10=0,取數字條件不成立,無法取到數字了,所以我們就得到了最終的結果4321,
??逆序輸出后的數值處后的數值和這幾個數字的關系需要用回圈來實作,那么回圈幾次呢,回圈什么時候終止呢?
思路1:回圈了幾次?
??由上面的推演我們知道回圈了4次,也就是回圈了數值的總位數次,所以思路一我們可以先計算用戶輸入數值的位數,然后再用控制回圈次數,最后逆序輸出,代碼如下:
#include <stdio.h>
int main(void)
{
int number = 0;//用戶輸入資料
int count = 0;//儲存個數
int i = 0;//控制回圈
int n_number = 0;//存放逆序輸入數值
int last_number = 0;//存放末位數字
int flag = 0;//因為操作多次操作了number,每次操作前要將number的值初始化成用戶輸入的值,
printf("請輸入一個數:\n");
scanf("%d", &number);
flag = number;//將number的值賦值給flag,以方便后續初始化,
number = flag;//第一次使用number來計算用戶輸入數值的位數
while (number!= 0)
{
number = number / 10;
count++;
}
number = flag;//第二次使用number進行逆序
for (i = 0; i < count; i++)
{
last_number = number % 10;//取數的最后一位
n_number = n_number * 10 + last_number;
//反轉后的數的規律;0+1-->2*10+1-->+3*10*10+2*10+1-->4*10*10*10+3*10*10+2*10+1
number = number / 10;
//更新number的值
}
number = flag;//第三次用number,輸出原始值,
printf("%d逆序輸出為%d", number, n_number);
return 0;
}
請輸入一個數:
1234
1234逆序輸出為4321
思路2:回圈什么時候終止?
??上面的思路簡單明了,但是略顯笨拙,還要先計算用戶輸入數值的位數,那么我們直接判斷終止條件可不可以呢,當然可以,我們發現回圈的終止條件就是number/10=0,number不能再更新了,這時候回圈終止,代碼如下:
#include <stdio.h>
int main(void)
{
int number = 0;//用來存放用戶輸入數值
int n_number = 0;//用來存放逆序數值
int last_number = 0;//用來存放獲取的末位數字
int flag = 0;//用來初始化
printf("請輸入一個數:\n");
scanf("%d", &number);
flag = number;//將number賦值給flag方便初始化
number = flag;
while (number != 0)
{//此處的回圈演算法不解釋了,上面有推演,
last_number = number % 10;
n_number = n_number * 10 + last_number;
number = number / 10;
}
number = flag;
printf("%d逆序輸出為%d", number, n_number);
return 0;
}
請輸入一個數:
12345
12345逆序輸出為54321
三、判斷回文數
??上面兩題都會做之后,判斷回文數就很簡單了,回文數的判斷不就是判斷原資料和逆序輸出的數數值是否相等嗎,最后加一個if陳述句判斷就可以了,代碼如下:
//代碼1
#include <stdio.h>
int main(void)
{
int number = 0;
int count = 0;
//number和count用來計算用戶輸入的數值的位數,
int i = 0;//控制回圈
int n_number = 0;//存放逆序輸出數值
int last_number = 0;//存放末位數字
int flag = 0;//因為操作了兩次number,所以每次操作number要將number的值初始化成用戶輸入的值,所以用了兩個flag變數,單獨行事
printf("請輸入一個數:\n");
scanf("%d", &number);
flag = number;//將number的值賦值給flag,以方便后續初始化,
number = flag;//第一次使用number來計算用戶輸入數值的位數
while (number!= 0)
{
number = number / 10;
count++;
}
number = flag;//第二次使用number進行逆序演算法
for (i = 0; i < count; i++)
{
last_number = number % 10;//取數的最后一位
n_number = n_number * 10 + last_number;
//反轉后的數的規律;0+1-->2*10+1-->+3*10*10+2*10+1-->4*10*10*10+3*10*10+2*10+1
number = number / 10;
//更新number的值
}
number = flag;//第三次用number,判斷正逆是否相等
if (n_number == number)
{
printf("您輸入的數是回文數,\n");
}
elseC
{
printf("您輸入的數不是回文數,\n");
}
return 0;
}
//代碼2
#include <stdio.h>
int main(void)
{
int number = 0;
int n_number = 0;
int last_number = 0;
int flag = 0;
printf("請輸入一個數:\n");
scanf("%d", &number);
flag = number;
number = flag;
while (number != 0)
{
last_number = number % 10;
n_number = n_number * 10 + last_number;
number = number / 10;
}
number = flag;
if (n_number == number)
{
printf("您輸入的數是回文數,\n");
}
else
{
printf("您輸入的數不是回文數,\n");
}
return 0;
}
請輸入一個數:
1234321
您輸入的數是回文數,
四、寫在后面
??今天剛好練習的時候做到了這道題,就對這道題的解法做了一些筆記,應該沒有問題,如有錯誤,還請各位大佬批評指正,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/260359.html
標籤:其他
