東方博宜 OJ 1201-1300

目錄

1268:【基礎】高精度加法

1269:【基礎】高精度減法

1280:【基礎】求 2 的 n 次方

1281:【基礎】求 2+2×2+2×2×2+?+2×2×2×?×2

1285:【基礎】計算 N 的階乘

1286:【基礎】高精度乘單精度

1287:【基礎】高精度乘

?1288:【入門】正整數 n 轉換為 8 進制

1289:【入門】正整數 N 轉換為 16 進制

解法一:分別判斷 ?n%16 結果在 0~9 及 10~15 的哪個范圍,分別轉換為對應的字符

解法二:用字符串存儲十六進制對應的字符,簡化 16 進制轉為字符的過程

1290:【入門】二進制數轉換十進制

1291:【入門】八進制轉十進制

1292:【入門】十六進制轉十進制

1294:【基礎】二進制轉十六進制


1268:【基礎】高精度加法

#include <bits/stdc++.h>
using namespace std;
/*
第一步:用 string 讀入高精度整數
第二步:將兩個高精度整數逆序存入 a、b 兩個整數數組
第三步:從左向右,逐位求和,結果存入 c 數組從左向右,逐位進位
第四步:逆序輸出結果
*/
string s1, s2;//高精度整數
int a[250], b[250], c[500];
int i, j, len;int main(){cin >> s1 >> s2;//第二步:將兩個高精度整數逆序存入 a b 兩個整數數組for (i = 0; i < s1.size(); i++){a[s1.size()-i-1] = s1[i]-'0';}for (i = 0; i < s2.size(); i++){b[s2.size()-i-1] = s2[i]-'0';}//第三步:從左向右,逐位求和,結果存入 c 數組//        從左向右,逐位進位//加法的次數,取決于兩個整數的較長的字符串len = s1.size();if (s2.size() > s1.size()){len = s2.size();}//逐位相加for (i = 0; i < len; i++){c[i] = a[i] + b[i];}//逐位進位for (i = 0; i < len; i++){if (c[i] >= 10){c[i+1] = c[i+1] + c[i] / 10;c[i] = c[i] % 10;}}//第四步:逆序輸出結果//兩個不超過 len 位的整數做加法,結果可能是 1en+1 位if (c[len] != 0){len++;}//逆序輸出結果for (i = len - 1; i >= 0; i--){cout << c[i];}}

1269:【基礎】高精度減法

#include <bits/stdc++.h>
using namespace std;
/*
第一步:判斷 s1 和 s2 的大小關系 
第二步:將兩個字符串逆序存入 2 個整數數組
第三步:從左至右,逐位相減,不夠借位
第四步:從右向左,逆序輸出
*/
string s1, s2;
int a[250], b[250], c[250];
int i, len, p;
char f = '+';//表示結果的正負int main(){cin >> s1 >> s2;//字符串長的數值更大,一樣長字典碼大的一定大;if (s1.size() < s2.size() || (s1.size() == s2.size() && s1 < s2)){f = '-';swap(s1, s2);//直接交換兩個變量的值}//將s1和s2逆序存入整數數組for (i = 0; i < s1.size(); i++){a[i] = s1[s1.size()-i-1] - '0';}for (i = 0; i < s2.size(); i++){b[i] = s2[s2.size()-i-1] - '0';}//逐位相減len = s1.size();for (i = 0; i < len; i++){//如果不夠減,向右借 1,當 10 用if (a[i] < b[i]){a[i+1] = a[i+1] - 1;a[i] = a[i] + 10;}c[i] = a[i] - b[i];}//判斷是否要輸出負號if (f == '-') cout << f;//從右向左逐位輸出,從第一個遇到的非 0 元素開始輸出for (i = len - 1; i >= 0; i--){if (c[i] != 0){p = i;break;}}//逆序從第一個非 0 元素輸出每一位for (i = p; i >= 0; i--){cout << c[i];}
}

1280:【基礎】求 2 的 n 次方

#include <bits/stdc++.h>
using namespace std;int a[100] = {1};
//k 代表 a 數組元素的個數,代表了高精度的整數的位數
int i, j, k = 1, n;
int main(){cin >> n;//循環 n 次,每次都將 a 數組 * 2for (i = 1; i <= n; i++){//將 a 數組的每一位都 * 2for (j = 0; j < k; j++){a[j] = a[j] * 2;}//逐位進位for (j = 0; j < k; j++){if (a[j] >= 10){a[j+1] = a[j+1] + a[j] / 10;a[j] = a[j] % 10;}}//判斷 a 數組是否多出一位if( a[k] != 0){k++;}}//逆序輸出 a 數組的 k 個數for(i = k - 1; i >= 0; i--){cout << a[i];}
}

1281:【基礎】求 2+2×2+2×2×2+?+2×2×2×?×2

#include <bits/stdc++.h>
using namespace std;int a[100] = {1};
int r[1000];
//k 代表 a 數組元素的個數,代表了高精度的整數的位數
//k2 代表了高精度的總和的位數
int i, j, k = 1, n, k2 = 1, len;
int main(){cin >> n;//循環 n 次,每次都將 a 數組 * 2for (i = 1; i <= n; i++){//將 a 數組的每一位都 * 2for (j = 0; j < k; j++){a[j] = a[j] * 2;}//逐位進位for (j = 0; j < k; j++){if (a[j] >= 10){a[j+1] = a[j+1] + a[j] / 10;a[j] = a[j] % 10;}}//判斷 a 數組是否多出一位if ( a[k] != 0){k++;}//求出了 2 的 i 次方,結果為 k 位//將 k 位的 2 的 i 次方,加到 k2 位的總和 r 上 len = k;if (k2 > k) len = k2;for (j = 0; j < len; j++){r[j] = r[j] + a[j];//進位if (r[j] >= 10){r[j+1] = r[j+1] + r[j] /10;r[j] = r[j] % 10;}//判斷 r 數組是否多了 1 位if (r[k2] != 0) k2++;}}//輸出 r 數組的結果 for (i = k2 - 1; i >= 0; i--){cout << r[i];}
}

1285:【基礎】計算 N 的階乘

1286:【基礎】高精度乘單精度

#include <bits/stdc++.h>
using namespace std;
/*
第一步:將高精度整數 s1,逆序存入整數數組 a
第二步:將 a 數組的每一位,逐位和整數 b 相乘,結果存入 a 數組
第三步:逐位進位
第四步:逆序輸出 
*/string s1;//高精度整數
int a[250], c[250], p;
int b, len;int main(){cin >> s1 >> b;//第二步:將 s1 逆序存入 a 數組 for (int i = 0; i < s1.size(); i++){a[s1.size()-i-1] = s1[i]-'0';}//第三步:逐位相乘 //乘法的次數,取決于符串長度 len = s1.size();	for (int i = 0; i < len; i++){c[i] = a[i] * b;}//逐位進位 //結果的最大可能長度為高精度數值位數+單精度數值位數-1//該題中單精度數值最大是 10000,即 s1*b 最多多出 4 位 for (int i = 0; i < len + 4; i++){if (c[i] >= 10){c[i+1] = c[i+1] + c[i] / 10;c[i] = c[i] % 10;}}//第四步:逆序輸出,從第一個非 0 元素開始輸出 for (int i = len + 3; i >= 0; i--){if (c[i] != 0){p = i;break;}}for (int i = p; i >= 0; i--){	 cout << c[i];}}

1287:【基礎】高精度乘

#include <bits/stdc++.h>
using namespace std;string s1, s2;
int a[250], b[250], c[500];
int p;int main(){cin >> s1 >> s2;//將 s1 和 s2逆序輸入數組for (int i = 0; i < s1.size(); i++) {a[i] = s1[s1.size()-i-1]-'0';}for (int i = 0; i < s2.size(); i++) {b[i] = s2[s2.size()-i-1]-'0';}//逐位乘(進位) for (int i = 0; i < s1.size(); i++){for (int j = 0; j < s2.size(); j++){c[i+j] = c[i+j] + a[i] * b[j];//進位if (c[i+j] >= 10){c[i+j+1] = c[i+j+1] + c[i+j] / 10;c[i+j] = c[i+j] % 10;} }} //逆序輸出,從第一個非 0 元素輸出for (int i = s1.size() + s2.size() - 1; i >= 0; i--){if (c[i] != 0){p = i;break;}} for (int i = p; i >= 0; i--){cout << c[i];}
}

?1288:【入門】正整數 n 轉換為 8 進制

#include <bits/stdc++.h>
using namespace std;int main(){long long n;string s;char c;cin >> n;//除 8 取余 while (n != 0){c = n % 8 + '0';n = n / 8;s = c + s;}if (s == ""){cout << 0;}else{cout << s;}}

1289:【入門】正整數 N 轉換為 16 進制

解法一:分別判斷 ?n%16 結果在 0~9 及 10~15 的哪個范圍,分別轉換為對應的字符

#include <bits/stdc++.h>
using namespace std;
/* 
n是一個不超過 18 位的正整數
*/
long long n, x;
string s;
char c;
int main(){cin >> n;while (n != 0){x = n % 16;//cout<<x<<endl;//將 x 轉換為字符逆序存入字符串 s//x:0~9 ->'0'~'9'//x:10~15 ->'A'~'F'if (x < 10){c = x + '0';}else{c = x + 'A' - 10;}s = c + s;n = n / 16;}if (s == ""){cout << 0;}else{cout << s;}}

解法二:用字符串存儲十六進制對應的字符,簡化 16 進制轉為字符的過程

#include <bits/stdc++.h>
using namespace std;
/* 
n是一個不超過 18 位的正整數
*/
long long n, x;
string s;
string t = "0123456789ABCDEF";
int main(){cin >> n;while (n != 0){x = n % 16;//cout << x << endl;//將 x 轉換為字符逆序存入字符串 s//x:0~9 ->'0'~'9'//x:10~15 ->'A'~"F//將 n%16 轉換為字符逆序存入 ss = t[x] + s;n = n / 16;}if (s == ""){cout << 0;}else{cout << s;}
}

1290:【入門】二進制數轉換十進制

#include <bits/stdc++.h>
using namespace std;string s;//存放二進制
int r, t = 1, i;//t:表示權重
int main(){cin >> s;for (i = s.size() - 1; i >= 0; i--){r = r + (s[i] - '0') * t;t = t * 2;}cout << r;
}

1291:【入門】八進制轉十進制

#include <bits/stdc++.h>
using namespace std;int main(){string x;long long r = 0;long long t = 1;cin >> x;for (int i = x.size() - 1; i >= 0; i--){r = r + (x[i]-'0') * t;t = t * 8;}cout << r;
}

1292:【入門】十六進制轉十進制

#include <bits/stdc++.h>
using namespace std;
string s;
long long r, t = 1, i;//t:表示權重,也就是 16 的 i 次方
int main(){cin >> s;//逆序計算,按權展開for (i = s.size() - 1; i >= 0; i--){//如果 s[i] 是 '0'~'9'if (isdigit(s[i])){r = r + (s[i] - '0') * t;}else{//如果 s[i] 是'A'~'F'r = r + (s[i] - 'A' + 10) * t;}t = t * 16;}cout << r;
}

1294:【基礎】二進制轉十六進制

# include <bits/stdc++.h>
using namespace std;
//將 4 位的 2 進制 轉換為 1 位的 16 進制
char num(string s){//從最低位開始按權展開,將 2 進制轉換為十進制//再轉換為 16 進制int r = 0, t = 1;for (int i = s.size()-1; i >= 0; i--){r = r + (s[i] - '0') * t;t = t * 2;} char c;//存儲 1 位的 16 進制字符if (r < 10) {c = r + '0';}else{c = r + 'A' - 10;}return c;
} int main(){string s, t;//存放二進制cin>>s;//補 0 if (s.size() % 4 == 1){s = "000" + s;}else if (s.size() % 4 == 2){s = "00" + s;}else if (s.size() % 4 == 3){s = "0" + s;}	// 每 4 位一格,將 4 位的二進制轉換為 16 進制for (int i = 0; i < s.size(); i = i + 4){t = s.substr(i, 4);cout << num(t);	} 
}

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

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

相關文章

第一百三十三節 Java數據類型教程 - Java基本數據類型

Java數據類型教程 - Java基本數據類型 Java定義了八種基本類型的數據:byte&#xff0c;short&#xff0c;int&#xff0c;long&#xff0c;char&#xff0c;float&#xff0c;double和boolean。 基本類型通常被稱為簡單類型。 這些可以分為四組: Integers - 包括byte&#x…

求推薦幾款http可視化調試工具?

Postman 非常流行的API調試工具&#xff0c;適用于構建、測試和文檔化APIs。它支持各種HTTP方法&#xff0c;有強大的集合和環境管理功能&#xff0c;以及代碼生成能力。 BB-API 是一款旨在提升開發效率的工具&#xff0c;它專注于提供簡約、完全免費且功能強大的HTTP模擬請…

目標檢測算法

一、緒論 1.1 目標檢測算法的定義和背景 1.2 目標檢測算法在計算機視覺領域的重要性 二、目標檢測算法的發展歷程 2.1 傳統目標檢測算法 2.2 基于深度學習的目標檢測算法 2.3 目標檢測算法的評價指標 三、目標檢測算法的關鍵技術 3.1 區域建議網絡(RPN) 3.2 卷積神經…

springmvc快速上手

一、創建工程 1、創建maven工程&#xff0c;添加maven-archetype-webapp模版 2、添加依賴 <properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.co…

每日一題——Python實現PAT乙級1059 C語言競賽(舉一反三+思想解讀+逐步優化)四千字好文

一個認為一切根源都是“自己不夠強”的INTJ 個人主頁&#xff1a;用哲學編程-CSDN博客專欄&#xff1a;每日一題——舉一反三Python編程學習Python內置函數 Python-3.12.0文檔解讀 目錄 我的寫法 時間復雜度分析 空間復雜度分析 代碼優化建議 總結 我要更強 優化方法…

macos Darwin安裝faiss-cpu

文章目錄 macos 使用brew instll fass, 后python3.12執行引用faiss包功能出現的問題 安裝時遇到問題如下 ModuleNotFoundError Traceback (most recent call last) File ~/Src/ai/framework/langchain/.venv/lib/python3.12/site-packages/langchain_co…

Spring事務的實現

Spring事務的實現分為編程式事務和聲明式事務。 編程式事務 編程式事務管理需要開發者在代碼中顯式地調用事務管理相關的方法,如`beginTransaction()`、`commit()`和`rollback()`等。在Spring中,通常通過以下兩種方式來實現編程式事務: 使用`TransactionTemplate`,`Tran…

macOS 安裝redis

安裝Redis在macOS上通常通過Homebrew進行&#xff0c;Homebrew是macOS上一個流行的包管理器。以下是安裝Redis的步驟&#xff1a; 一 使用Homebrew安裝Redis 1、安裝Homebrew&#xff08;如果尚未安裝&#xff09;&#xff1a; 打開終端&#xff08;Terminal&#xff09;并執…

.NET周刊【6月第4期 2024-06-23】

國內文章 C#.Net筑基-集合知識全解 https://www.cnblogs.com/anding/p/18229596 .Net中提供了數組、列表、字典等多種集合類型&#xff0c;分為泛型和非泛型集合。泛型集合具有更好的性能和類型安全性。集合的基礎接口包括IEnumerator、IEnumerable、ICollection、IList、ID…

Gradio 4.37.1官方教程二:Blocks

文章目錄 一、Blocks及事件監聽器1.1 Blocks結構1.2 事件監聽器的類型1.3 多數據流1.4 多輸入組件1.5 多輸出組件1.6 更新組件配置1.7 添加示例1.8 連續運行事件1.9 持續運行事件1.9.1 every參數1.9.2 load方法1.9.3 change方法 1.10 收集事件數據1.11 綁定多個觸發器到同一函數…

基于線調頻小波變換的一維時間序列時頻分析方法(MATLAB)

在機械故障診斷領域,振動信號的處理常采用以快速傅立葉變換為基礎的相關分析、幅值分析、頻譜分析等時域和頻域分析方法。但經典的FFT存在固有缺點,即它雖然在頻域范圍內是完全局部化的,但是它不包含任何時域信息,因而不適于分析非平穩信號。近年來涌現的各種時頻分析方法(短時…

【刷題】初步認識深搜(DFS)

送給大家一句話&#xff1a; 擁有希望的人&#xff0c;和漫天的星星一樣&#xff0c;是永遠不會孤獨的。 -- 《星游記》 初步認識深搜&#xff08;DFS&#xff09; dfs算法二叉樹中的深搜Leetcode 129. 求根節點到葉節點數字之和題目描述算法思路 Leetcode 814. 二叉樹剪枝題…

Redis-實戰篇-緩存更新策略(內存淘汰、超時剔除、主動更新)

文章目錄 1、緩存更新策略1.1、內存淘汰1.2、超時剔除1.3、主動更新 2、業務場景&#xff1a;3、主動更新在企業中業務實現有三種方式3.1、Cache Aside Pattern3.1.1、操作緩存和數據庫時有三個問題需要考慮&#xff1a;3.1.1.1、刪除緩存還是更新緩存&#xff1f;3.1.1.2、如何…

數據同步軟件有哪些

數據同步軟件有哪些呢&#xff1f;隨著企業規模的擴大&#xff0c;企業數據也積累得越來越多&#xff0c;萬一發生宕機風險&#xff0c;那么這個損失將不可估量。所以為了容災備用&#xff0c;我們往往需要將數據同步到另一臺備胎服務器上&#xff0c;進行冗余。 那么需要同步的…

centos7.9 python3環境(virtualenv)搭建及所遇錯誤

人望山&#xff0c;魚窺荷&#xff0c;真正喜歡想要的&#xff0c;沒有一樣可以輕易得到。 目錄 # 1. 解決版本沖突問題--建議不要跳過(一定要查看軟鏈接是否鏈接正確) # 2. python3(virtualenv)環境搭建 # 3. virtualenv常用命令 # 4. 所遇錯誤解析 ## 4.1 遇到 No modul…

惠海 H6246低功耗DC/DC降壓型恒壓芯片60V降3.3V5V12V 藍牙模塊 單片機供電

1.產品描述 H6246是一種內置60V耐壓MOS&#xff0c;支持輸入高達48V的高壓降壓開關控制器&#xff0c;可以向負載提供0.3A的連續電流。H6246支持輸出恒定電壓&#xff0c;可以通過調節VFB采樣電阻來設置輸出電壓&#xff0c;同時支持最大電流限制&#xff0c;可以通過修改CS采…

操作系統期末復習考題二

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 一、前言&#x1f680;&#x1f680;&#x1f680;二、正文??????三、總結&#x1f353;&#x1f353;&#x1f353; 一、前言&#x1f680;&#x1f680;&am…

【資源調度】1-何為調度?

導讀&#xff1a;本期是全網最全【資源調度】系列推文的第1期(共50期左右)。我們將對調度的定義與作用、計劃與調度的關系、調度問題的拆解做出詳細介紹&#xff0c;使大家對【資源調度】問題有了一個整體的認識&#xff0c;為后續的內容奠定基礎。 作者1&#xff1a;張哲銘&am…

個人搭建cppreference網站

近日,由于購買的騰訊云服務器要過期了,之前在服務器搭建的cppreference也要重新搭建,故寫下此文章 cppreference的訪問速度也慢,故自己WSL子系統簡單搭鍵一下是個不錯的選擇 環境準備 首先,自己先安裝Nginx,在網上找安裝教程即可下載cppreference網站資源包:https://pan.baidu…

ubuntu 軟鏈接(ubuntu20.04)

ubuntu 軟鏈接&#xff08;ubuntu20.04&#xff09; 在Ubuntu和其他Linux系統中&#xff0c;軟鏈接&#xff08;也稱為符號鏈接&#xff09;是文件系統中的一個特殊類型的文件&#xff0c;它作為一個引用或指針&#xff0c;指向另一個文件或目錄。軟鏈接類似于Windows中的快捷…