演算法競賽中c++一些需要註意的錯誤

来源:https://www.cnblogs.com/Personal-Reality/archive/2018/11/08/9922411.html
-Advertisement-
Play Games

1. 關於精度: 取整 除法取整: (除數為正)被除數為正時系統除法為向下取整,被除數為負時系統除法為向上取整。 向上取整(被除數非負,除數為正): 一般寫法(有bug): 上述寫法只適用於x為正的情況,x為0時有錯誤。 正確寫法: 或 庫函數(cmath庫) : (返回值為double) 向上取整 ...


1. 關於精度:

取整

  • 除法取整:
    • (除數為正)被除數為正時系統除法為向下取整,被除數為負時系統除法為向上取整。
    • 向上取整(被除數非負,除數為正):
      一般寫法(有bug):
    int cal(int x,int y)
    {
      return (x-1)/y+1;
    }

    上述寫法只適用於x為正的情況,x為0時有錯誤。
    正確寫法:

    int cal(int x,int y)
    {
      return x/y+(x%y!=0);
    }

    int cal(int x,int y)
    {
      return (x+y-1)/y;
    }
  • 庫函數(cmath庫)

    (返回值為double)
    向上取整:ceil(x);
    向下取整:floor(x);
  • 四捨五入:
LL cal(double x)
{
    return (x>=0.0)?(LL)(x+0.5):(LL)(x-0.5);
}
  • 除數為正通用:
    • 向上取整:
    int cal(int x,int y)
    {
      return (x>=0)?(x+y-1)/y:x/y;
    }
    • 向下取整:
     int cal(int x,int y)
     {
       return (x>=0)?x/y:(x-(y-1))/y;
     }

    賦值

  • 科學計數法:
LL inf=1e18+7;

上述寫法有錯,因為科學計數法為double型,由於精度問題,inf實際被賦值為1e18.
正確寫法:

LL inf=1000000000000000007LL;
  • double:
 double x=0.0;
  x=-x;
  cout<<x;

控制台輸出為:\(-0\)

溢出

  • 位運算左移:
cout<<(1<<31);

控制台輸出:\(-2147483648\)
正確寫法:

 cout<<(1LL<<31);

註意,以下寫法還是會溢出:

cout<<(1<<31LL);
  • 迴圈:
    因為int型變數溢出,以下迴圈無法退出:
for(int i=0;i<=2147483647;i++)if(i<0)cout<<"overflow";

2. 關於字元串:

讀入:

  int x=1;
  char s[1];
  scanf("%s",&s);
  cout<<x;

輸入:a
控制台輸出:0
這是因為讀入a之後還讀入了一個換行符,覆蓋了x的記憶體。所以,字元數組最好不壓邊界開(除非用getchar)。

3. 關於編譯器:

報錯:

  • id returned 1:
    • 一種情況是該源文件其可執行文件正在運行
    • 另一種情況是主函數名拼錯了:
    int mian()
    {
     return 0;
    }

    運行:

    int main()
    {
    // \
    cout<<"hello world";
    return 0;
    }
    控制台無輸出。
    在註釋後“\”這樣寫會跳過該行的下一行語句

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

-Advertisement-
Play Games
更多相關文章
  • 本文檔創建時間:2018-11-7 15:52:28 方法一,使用a標簽添加 簡單的案例: 此方法的弊端有很多,比如會改變地址欄參數,跳轉比較突兀,對用戶不友好等... 所以,如果你比較註重細節,有這方面的強迫症,建議使用下麵這種方法. 方法二,使用jQuery的animate動畫跳轉 廢話不說,先 ...
  • 廢話少說,見官方文檔: 他的用法是:document.getElementById('username').focus(); 這樣寫在display:block;顯示之後就可以自動激活input輸入框啦! 這並不是最有意思的地方,最有意思的地方是他可以觸發該元素的 相應 事件; 接下來來舉個慄子: ...
  • 前端進階肯定會遇到npm(包管理工具)的使用,下麵是我總結的一些比較實用的npm指令: npm install <name>安裝nodejs的依賴包 例如npm install express 就會預設安裝express的最新版本,也可以通過在後面加版本號的方式安裝指定版本,如npm install ...
  • 一步一步實現web程式信息管理系統 在web程式中特別是信息管理系統, 登陸 功能必須有而且特別重要。每一個學習程式開發或以後工作中,都會遇到實現 登陸 功能的需求。而登陸功能最終提供給客戶或展現給客戶的最基本的就是2個文本框一個 按鈕用戶名與密碼,外加一個登陸按鈕 。本篇記錄一下登陸功能的前端界面 ...
  • 我們都知道企業建網站目的得到更多的潛在用戶,那麼現在建出企業需求的、吸引潛在用戶的網站呢? 下麵搜客建站就來和大家說說:如何製作出吸引潛在用戶的網站? 一、網站頁面的風格設計 設計網站就好比我們平時評論一個女人美不美,我們要從她的衣著打扮來判斷的,那麼同樣的,我們判斷一個網站的設計風格如何,就要從它 ...
  • 官網 http://www.fhadmin.org/D 集成安全許可權框架shiro Shiro 是一個用 Java 語言實現的框架,通過一個簡單易用的 API 提供身份驗證和授權,更安全,更可靠E 集成ehcache分散式緩存 是一個純Java的進程內緩存框架,具有快速、精幹等特點,廣泛使用的開源J ...
  • ASP.net技術支撐,learun工作流開發分享 一、工作流 根據的定義,工作流就是自動運作的業務過程部分或整體,表現為參與者對文件、信息或任務按照規程採取行動,並令其在參與者之間傳遞。簡單地說,工作流就是一系列相互銜接、自動進行的業務活動或任務。 工作流是針對工作中具有固定程式的常規活動而提出的 ...
  • 原創作品,轉載請註明出處:https://www.cnblogs.com/sunshine5683/p/9927186.html 今天在工作中遇到對一個已知的一維數組取出其最大值和最小值,分別用於參與其他運算,廢話不多說,直接上代碼。 package xhq.text; public class M ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...