C語言程式設計100例之(6):數字反轉

来源:https://www.cnblogs.com/cs-whut/archive/2019/11/15/11863842.html
-Advertisement-
Play Games

例6 數字反轉 題目描述 給定一個整數,請將該數各個位上數字反轉得到一個新數。新數也應滿足整數的常見形式,即除非給定的原數為零,否則反轉後得到的新數的最高位數字不應為零(參見樣例2)。 輸入格式 一個整數 N 輸出格式 一個整數,表示反轉後的新數。 輸入樣例 #1 123 輸出樣例 #1 321 輸 ...


例6    數字反轉

題目描述

給定一個整數,請將該數各個位上數字反轉得到一個新數。新數也應滿足整數的常見形式,即除非給定的原數為零,否則反轉後得到的新數的最高位數字不應為零(參見樣例2)。

輸入格式

一個整數 N

輸出格式

一個整數,表示反轉後的新數。

輸入樣例 #1

123

輸出樣例 #1

321

輸入樣例 #2

-380

輸出樣例 #2

-83

        (1)編程思路。

        將一個非負整數number各位上的數字依次分離出來,其操作步驟為:

1)分離出number的個位數,即number%10。

2)將number除以10,作為新的number,即新的number丟掉了個位數。

3)如果number等於0,分離完畢,結束。否則,轉第1)步,繼續顯示。

例如,number=1234,number%10=4, number=1234/10=123,得到數字4;

                        number%10=3, number=123/10=12,得到數字3;

number%10=2, number=12/10=1,得到數字2;

number%10=1, number=1/10=0,得到數字1;結束。

由數字4、3、2、1如何得到整數4321呢?

4321=4*1000+3*100+2*10+1=4*103+3*102+2*10+1

右邊的多項式可以採用秦九韶演算法求解。

設要求解  P=4*103+3*102+2*10+1

可演變為  P=(((0*10+4)*10 +3)*10+2)*10+1。

這樣,可令P初值為0,每給定一個數字a,執行 P=P*10+a 即可。

由數字4、3、2、1得到整數4321的過程描述為:

P=0  ,給出數字4,P= 0*10+4 =4;   之後數字3 , P=4*10+3= 43;

之後數字2,P= 43*10+2 =432;   最後數字1 , P=432*10+1= 4321。

將上述兩個操作結合起來,一邊分離出number的各位上的數字,一邊將其拼到逆序數P上去,這樣可將求number逆序數P的過程寫成一個簡單的迴圈。

P=0;

While (number!=0)  { p=p*10+number%10;   number=number/10;   }

(2)源程式。

#include <stdio.h>

int main()

{

         int n,m,f;

         scanf("%d",&n);

         m=0; f=1;

          if (n<0)

         {

                   n=-n;

                   f=-1;

         }

         while (n!=0)

         {

                   m=m*10+n%10;

                   n/=10;

         }

         m=f*m;

         printf("%d\n",m);

         return 0;

}

習題6

6-1  迴文數的個數

題目描述

 “迴文”是指正讀反讀都能讀通的句子,它是古今中外都有的一種修辭方式和文字游戲,如“我為人人,人人為我”等。在數學中也有這樣一類數字有這樣的特征,稱為迴文數(palindrome number)。

設n是一任意自然數。若將n的各位數字反向排列所得自然數n1與n相等,則稱n為一迴文數。例如,若n=1234321,則稱n為一迴文數;但若n=1234567,則n不是迴文數。

例如,10到100之間的迴文數有11,22,33,44,55,66,77,88,99共9個。

輸入格式

兩個整數a和b(10≤a≤b≤65535)。

輸出格式

一個整數,表示整數a和b之間所有迴文數的個數。

輸入樣例

10  100

輸出樣例

9

        (1)編程思路。

        一個正整數如果其逆序數與其相等,則它一定是一個迴文數。按例6的方法編寫一個函數int inverse(int n)求整數n的逆序數。

        (2)源程式。

#include<stdio.h>

int inverse(int n)

{

    int s=0;

    while (n!=0)

    {

        s=s*10+n%10;

        n/=10;

    }

    return s;

}

int main()

{

         int a,b,cnt,i;

         while(scanf("%d%d", &a,&b)!=EOF)

         {

                   cnt=0;

                   for (i=a;i<=b;i++)

                          if (i==inverse(i)) cnt++;

                   printf("%d\n", cnt);

         }

         return 0;

}

6-2  迴文數猜想

        本題選自杭州電子科技大學OJ題庫 (http://acm.hdu.edu.cn/showproblem.php?pid=1282)

Problem Description

一個正整數,如果從左向右讀(稱之為正序數)和從右向左讀(稱之為倒序數)是一樣的,這樣的數就叫迴文數。任取一個正整數,如果不是迴文數,將該數與他的倒序數相加,若其和不是迴文數,則重覆上述步驟,一直到獲得迴文數為止。例如:68變成154(68+86),再變成605(154+451),最後變成1111(605+506),而1111是迴文數。於是有數學家提出一個猜想:不論開始是什麼正整數,在經過有限次正序數和倒序數相加的步驟後,都會得到一個迴文數。至今為止還不知道這個猜想是對還是錯。現在請你編程式驗證之。

Input

每行一個正整數。

特別說明:輸入的數據保證中間結果小於2^31。

Output

對應每個輸入,輸出兩行,一行是變換的次數,一行是變換的過程。

Sample Input

27228

37649

Sample Output

3

27228--->109500--->115401--->219912

2

37649--->132322--->355553

         (1)編程思路。

         同樣編寫一個函數int inverse(int n)求整數n的逆序數。

        (2)源程式。

#include<stdio.h>

int inverse(int n)

{

    int s=0;

    while (n!=0)

    {

        s=s*10+n%10;

        n/=10;

    }

    return s;

}

int main()

{

    int m,cnt,t;

    while(scanf("%d",&m)!=EOF)

    {

        cnt=0;

        t=m;

        while (t!=inverse(t))

        {

            cnt++;

            t=t+inverse(t);

        }

        printf("%d\n",cnt);

        printf("%d",m);

        while (cnt--)

        {

            m=m+inverse(m);

            printf("--->%d",m);

        }

        printf("\n");

    }

    return 0;

}

6-3  叛逆的小明

         本題選自杭州電子科技大學OJ題庫 (http://acm.hdu.edu.cn/showproblem.php?pid=4554)

Problem Description

叛逆期的小明什麼都喜歡反著做,連看數字也是如此(負號除外),比如:小明會把1234它看成4321;把-1234看成-4321;把230看成032 (032=32);把-230看成-032(-032=-32)。

現在,小明做了一些a+b和a-b的題目(a, b為整數且不含前導0),如果給你這些題目正確的答案,你能猜出小明會做得到什麼答案嗎?

Input

輸入第一行為一個正整數T(T<=10000),表示小明共做了T道題。

接下來T行,每行是兩個整數x,y(-1000000<=x, y<=1000000), x表示a+b的正確答案,y表示a-b的正確答案。

輸入保證合法,且不需考慮a或b是小數的情況。

Output

輸出共T行,每行輸出兩個整數s t,之間用一個空格分開,其中s表示小明將得到的a+b答案,t表示小明將得到的a-b答案。

Sample Input

3

20 6

7 7

-100 -140

Sample Output

38 24

7 7

-19 -23

        (1)編程思路。

         由於輸入的x和y是正確答案,即x=a+b ,y=a-b。 可求得 a=(x+y)/2,b=(x-y)/2。

        分別求得a和b的逆序數c和d,這是小明的運算數,輸出c+d和c-d即可。

       (2)源程式。

#include<stdio.h>

int inverse(int n)

{

    int s=0;

    while (n!=0)

    {

        s=s*10+n%10;

        n/=10;

    }

    return s;

}

int main()

{

         int x,y,a,b,c,d,t;

         scanf("%d", &t);

         while(t--)

         {

                   scanf("%d %d", &x, &y);

                   a = (x +y) / 2;

                   b = (x - y) / 2;

                   if (a < 0)

                            c = -1*inverse(-a);

                   else

                            c = inverse(a);

                   if (b < 0)

                            d = -1*inverse(-b);

                   else

                            d = inverse(b);

                   printf("%d %d\n", c + d, c - d);

         }

         return 0;

}


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 頂級對象:window onload = function(){} getElementById('nav').offsetHieght //獲取div=nav元素,距離html頂部元素的距離,同類型的還有offsetLeft,offsetRight.offsetBottom 頁面滾動事件: <bo ...
  • vue中添加滾動載入更多,因為是單頁面所以需要在跳出頁面時候銷毀滾動,要不會出現錯亂。我們在mounted建立滾動,destroyed銷毀滾動。 mounted () { window.addEventListener('scroll', this.handleScroll) }, destroye ...
  • 2d x y 3d x y z 左手坐標系 伸出左手,讓拇指和食指成“L”形,大拇指向右,食指向上,中指指向前方。這樣我們就建立了一個左手坐標系,拇指、食指和中指分別代表X、Y、Z軸的正方向。如下圖 CSS3中的3D坐標系與上述的3D坐標系是有一定區別的,相當於其繞著X軸旋轉了180度,如下圖 簡單 ...
  • 現在很多網站會用到進入網站特效,到網頁沒有載入完成的時候,會有一個loding特效,載入完了之後才能看到頁面,今天就帶著做一個js進度條效果,今天要做的效果是純js進度條載入,沒有用到框架,方便大家進行深入理解: 首先我們要進行js進度條的佈局 js進度條佈局如下: 1234567891011121 ...
  • 網路請求編碼表示會從你是否關註Request head的哪些內容入手,一般關註點放在statusCode和method上就夠用,重點200,304。同時掌握了基礎後希望註意的點為文件上傳的內容(百度問過斷點續傳的實現) 200: ‘伺服器成功返回請求的數據。’,201: ‘新建或修改數據成功。’,2 ...
  • 一.起因 我在做爬蟲的時候發現很多網站上都在url上加一個 一開始我以為是啥加密後面發現其實他在後臺解析的時候也不需要 ,那他加個隨機數是做啥子 二.查看文獻得到總結 常用修改url方式 ...
  • transform是CSS3中具有顛覆性的特征之一,可以實現元素的位移、旋轉、傾斜、縮放,甚至支持矩陣方式,配合過渡和即將學習的動畫知識,可以取代大量之前只能靠Flash才可以實現的效果。 變形轉換 transform transform 變換 變形的意思 《 transformers 變形金剛》 ...
  • 對於DevOps的理解大家眾說紛紜,就連維基百科(Wikipedia)都沒有給出一個統一的定義。一般的解釋都是從字面上來理解,就是把開發(Development)和運維(Operations)整合到一起,來加速產品從啟動到上線的過程,並使之自動化。這個是對DevOps的廣義解釋,而且大多數人都是認可 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...