【實驗筆記】C語言實驗——超長正整數的減法運算

[問題描述]

編寫程序實現兩個超長正整數(每個最長80位數字)的減法運算。

[輸入形式]

從鍵盤讀入兩個整數,要考慮輸入高位可能為0的情況(如00083)
1.第一行是超長正整數A;
2.第二行是超長正整數B;

[輸出形式]

輸出只有一行,是長整數A減去長整數B的運算結果,從高到低依次輸出各位數字。要求: 若結果為0,則只輸出一個0;否則輸出的結果的最高位不能為0,并且各位數字緊密輸出。

[輸入樣例]

234098
134098703578230856

[輸出樣例]

-134098783577995958

[樣例說明]

進行兩個正整數減法運算,234098 - 134098703578230056 = - 134098703577995958。

[思路分析]

題目要求為超長正整數的減法運算,容易知道整型變量無法完成此操作,所以大體思路:考慮用兩個字符數組儲存,用兩數組的ASCII碼進行運算,然后判斷符號,進行輸出。
具體步驟:

  1. 先定義兩個字符數組代替整型儲存這兩個整數;
  2. 考慮字符數組ASCII碼相減需要對齊位數,排除數字開頭為0的情況,于是先用循環將每個數組前面的0都消去,使得兩數組代表的數字都是非零數開頭的;
  3. 由于字符數組ASCII碼相減從低位開始會更為容易,于是將處理0以后的兩個數組均調用逆序函數逆序存放,使得對應的數字為低位在前高位在后,由低到高依次運算,這樣容易處理借位情況;
  4. 定義字符數組的運算函數,將兩個字符數組對應位的ASCII碼分別相減,直接將結果保存在整型數組中,通過判斷整型數組每個數的正負來確定是否借位,如果小于0則借位,則它本身加十,并且高位即下一個數減去一來借位,執行完此操作,整型數組內存放的即超長整數的差的絕對值的逆序;
  5. 由于2)已經將兩個字符數組開頭的零去掉了,因此,位數不同時可以很容易由字符數組的長度來判斷兩個整數的大小,位數相同的時可以通過第一個不同字符的ASCII碼的數值的大小來判斷兩個整數的大小,通過不同的傳遞順序把兩個字符數組傳遞給運算函數,并判斷輸出時是否加負號;
  6. 確定正負號以后的最后一步即將之前保存的整型數組按照倒序輸出在符號后邊即可。

[代碼實現]

#include<stdio.h>
#include<string.h>
int c[100];
int judge(char a[],char b[])
{if (strlen(a) > strlen(b))return 1;else if (strlen(a) < strlen(b))return 0;elsefor (int i = 0; i < strlen(a); i++)if (a[i] > b[i])return 1;return 0;
}void minus(char a[], char b[])
{char t;for (int i = 0; i < strlen(a) / 2; i++){t = a[i];a[i]=a[strlen(a) - 1 - i];a[strlen(a) - 1 - i] = t;}for (int i = 0; i < strlen(b) / 2; i++){t = b[i];a[i] = a[strlen(b) - 1 - i];a[strlen(b) - 1 - i] = t;}for(int i=0;i<strlen(a);i++){if (i < strlen(b))c[i] = a[i] - b[i];elsec[i] = a[i] - '0';}for (int i = 0; i < strlen(a) - 1; i++)if(c[i]<0){c[i] += 10;c[i + 1] -= 1;}
}void deletechar(char a[])
{int t = 0, len;while (a[t] == '0')t++;len = strlen(a) - t;for (int i = 0; i <= len; i++)a[i] = a[i + t];
}
int main()
{char a[100], b[100];gets(a);gets(b);deletechar(a);deletechar(b);if (judge(a, b))minus(a, b);else{printf("-");minus(b, a);}int i = 100;while (c[i] == 0 && i != 0)i--;for (int j = i; j >= 0; j--)printf("%d", c[j]);
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/163416.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/163416.shtml
英文地址,請注明出處:http://en.pswp.cn/news/163416.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

FreeRTOS學習之路,以STM32F103C8T6為實驗MCU(2-3:任務切換)

學習之路主要為FreeRTOS操作系統在STM32F103&#xff08;STM32F103C8T6&#xff09;上的運用&#xff0c;采用的是標準庫編程的方式&#xff0c;使用的IDE為KEIL5。 注意&#xff01;&#xff01;&#xff01;本學習之路可以通過購買STM32最小系統板以及部分配件的方式進行學習…

使用 css 實現文字單行居右, 換行居左展示

給外層盒子設置居右展示, 子盒子設置居左。 原理是&#xff0c;如果子盒子沒有換行&#xff0c;那么子盒子的長度就是內容的長度&#xff0c;它根本沒有空間將字體移動居左&#xff0c;父盒子的居左樣式就會生效&#xff0c;子盒子就會居左展示。 當子盒子里面的文字換行了&…

3.1 Linux時間子系統

目錄 一時間子系統作用二 時間子系統初始化三 時間子系統框架 一時間子系統作用 1 提供時間 2 提供時鐘 3 提供進程輪詢 從應用層&#xff0c;分析其使用方法 從驅動層&#xff0c;給出timer和hrtimer的使用示例 二 時間子系統初始化 分別從介紹各個模塊初始化做了些什么工作…

在SOLIDWORKS中如何提升保存PDF版本文件的清晰度

隨著Solidworks年復一年的不斷更新&#xff0c;不僅僅是整個軟件的性能上的提升&#xff0c;其在輸出文件的功能上也同樣在精益求精。 但對于老版本的使用者和希望能讓輸出文件清晰度更進一步的使用者而言&#xff0c;可能目前我們所能達到的普通文件輸出清晰度遠遠無法達到他們…

如何將ONLYOFFICE與Python應用程序集成

ONLYOFFICE是一項功能強大的開源文檔編輯器&#xff0c;可以將文本文檔、電子表格和演示文稿、電子表單編輯功能集成至任何編程語言編寫的 Web 應用程序中。最新的7.5版本編輯器可以支持編輯PDF文件&#xff08;批注、繪圖等&#xff09;。在本文中&#xff0c;我們會帶你了解如…

【分享】Java Builder 建造者模式之案例分享

介紹 建造者模式&#xff08;Builder&#xff09;核心目的是通過使用多個簡單對象一步步構建出一個復雜對象。通過將復雜對象的構造過程拆分為多個簡單的步驟&#xff0c;使得創建對象更加靈活&#xff0c;可讀性和可維護性更強。 使用場景 創建一個由多個部分組成的復雜對象…

這樣寫Allure生成測試報告,學會直接漲薪5k

Allure是一個開源的測試報告生成框架&#xff0c;提供了測試報告定制化功能&#xff0c;相較于我們之前使用過pytest-html插件生成的html格式的測試報告&#xff0c;通過Allure生成的報告更加規范、清晰、美觀。 pytest框架支持使用Allure生成測試報告&#xff0c;接下來讓介紹…

SpringBoot整合knife4j生成Api文檔

一、介紹 先看效果 ①&#xff1a;Swagger 介紹 Swagger 是一個規范和完整的框架&#xff0c;用于生成、描述、調用和可視化 RESTful 風格的 Web 服務(https://swagger.io/)。 它的主要作用是&#xff1a; 使得前后端分離開發更加方便&#xff0c;有利于團隊協作 接口的文檔…

Doris-集群部署(四)

創建目錄并拷貝編譯后的文件 1&#xff09;創建目錄并拷貝編譯后的文件 mkdir /opt/module/apache-doris-0.15.0 cp -r /opt/software/apache-doris-0.15.0-incubating-src/output /opt/module/apache-doris-0.15.02&#xff09;修改可打開文件數&#xff08;每個節點&#x…

oracle數據庫巡檢常見腳本-系列三

簡介 作為數據庫管理員&#xff08;DBA&#xff09;&#xff0c;定期進行數據庫的日常巡檢是非常重要的。以下是一些原因&#xff1a; 保證系統的穩定性&#xff1a;通過定期巡檢&#xff0c;DBA可以發現并及時解決可能導致系統不穩定的問題&#xff0c;如性能瓶頸、資源利用率…

TIDB基礎

TIDB整個邏輯架構跟MYSQL類似&#xff0c;如下&#xff1a; TIDB集群&#xff1a;相當于MYSQL的數據庫服務器&#xff0c;區別是MYSQL數據庫服務器為單進程的&#xff0c;TIDB集群為分布式多進程的。 數據庫&#xff1a;同MYSQL數據庫&#xff0c;數據庫屬于集群&#xff0c;…

VM CentOS7安裝ffmpeg

項目中涉及給視頻添加水印&#xff0c;使用到了ffmpeg&#xff0c;windows系統可直接使用&#xff0c;Linux需要手動編譯完成ffmpeg后才可正常使用。 配置yum源: 備份原repo文件 cd /etc/yum.repos.d/mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.r…

編寫自己的CA和TA與逆向

參考內容《手機安全和可信應用開發》 https://note.youdao.com/s/MTlG4c1w 介紹 TA的全稱是Trust Application&#xff0c; 即可信任應用程序。 CA的全稱是Client Applicant&#xff0c; 即客戶端應用程序。 TA運行在OP-TEE的用戶空間&#xff0c; CA運行在REE側。 CA執行時代…

前端 Ajax 技術有哪些優缺點?

Ajax&#xff08;Asynchronous JavaScript and XML&#xff09;是一種基于前端 JavaScript 技術的異步通信技術&#xff0c;可以在不刷新整個頁面的情況下向服務器發送請求和接收響應&#xff0c;以實現動態加載內容和交互效果。下面是 Ajax 技術的優缺點&#xff1a; 優點&am…

css實現三行,溢出顯示省略號(后有js實現邏輯)

css實現代碼&#xff1a; .text-container {display: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: 3;overflow: hidden;text-overflow: ellipsis; }解釋&#xff1a; 1.-webkit-box 和 -webkit-box-orient 屬性將容器元素設置為一個垂直方向的彈性盒子&…

需求調研計劃及用戶需求調研單

1.目的 2.概述 3.需求調研計劃 3.1調研目的 3.2調研范圍 3.2.1.調研的職能范圍 3.2.2.調研的業務范圍 3.2.3.調研的地點范圍 3.3調研方式 3.4調研階段 3.5具體時間安排 軟件開發全文檔獲取&#xff1a;點我獲取 1、需求調研計劃 2、用戶需求調研單 項目名稱 客…

C++ auto的作用

auto的作用 保護變量的值不被修改&#xff0c;防止意外的錯誤操作&#xff1b;聲明函數參數為常量引用&#xff0c;以避免函數修改參數的值&#xff1b;聲明類的成員函數為常量成員函數&#xff0c;以確保函數不修改對象的狀態。 1 const關鍵字用于聲明一個常量&#xff0c;…

【EI會議投稿】第九屆電子技術和信息科學國際學術會議(ICETIS 2024)

第九屆電子技術和信息科學國際學術會議&#xff08;ICETIS 2024&#xff09; The 9th International Conference on Electronic Technology andInformation Science&#xff08;ICETIS 2024&#xff09; ICETIS會議始于2016年&#xff0c;先后吸引眾多來自國內外高等院校、科…

2023亞太杯數學建模競賽C題新能源電動汽車數據分析與代碼講解

C題論文包括摘要、問題重述、問題分析、模型假設、符號說明、模型的建立和求解&#xff08;問題1模型的建立和求解、問題2模型的建立和求解、問題3模型的建立和求解、問題4模型的建立和求解、問題5模型的建立和求解&#xff09;、模型的評價等等&#xff0c; 視頻講解如下&…