东方博宜 OJ 1201-1300

devtools/2024/10/17 2:11:01/

目录

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.ppmy.cn/devtools/56471.html

相关文章

React+TS前台项目实战(二十一)-- Search业务组件封装实现全局搜索

文章目录 前言一、Search组件封装1. 效果展示2. 功能分析3. 代码详细注释4. 使用方式 二、搜索结果展示组件封装1. 功能分析2. 代码详细注释 三、引用到文件&#xff0c;自行取用总结 前言 今天&#xff0c;我们来封装一个业务灵巧的组件&#xff0c;它集成了全局搜索和展示搜…

音频处理新纪元:AudioLM 长序列音频数据的智能优化策略

&#x1f30c; 音频处理新纪元&#xff1a;AudioLM 长序列音频数据的智能优化策略 &#x1f680; 在音频分析和深度学习领域&#xff0c;长序列音频数据的处理一直是一个挑战。长序列不仅包含丰富的信息&#xff0c;也带来了计算复杂度高、内存消耗大等问题。AudioLM&#xff…

昇思25天学习打卡营第2天|MindSpore快速入门-张量

张量 Tensor 张量&#xff08;Tensor&#xff09;是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数&#xff0c;这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。 张量是一种特殊的数据结构&#xff0c;与数组和矩阵非常相似。张量&#x…

.NET C# 使用OpenCV实现人脸识别

.NET C# 使用OpenCV实现模型训练、人脸识别 码图~~~ 1 引入依赖 OpenCvSHarp4 - 4.10.0.20240616 OpenCvSHarp4.runtime.win - 4.10.0.20240616 2 人脸数据存储结构 runtime directory | face | {id}_{name} | *.jpg id - 不可重复 name - 人名 *.jpg - 人脸照片3 Demo 3.…

基于springboot、logback的日志脱敏组件

Logback⽇志数据脱敏⼯具&#xff1a;隐私和安全的守护者 概述 在涉及敏感数据的⽇志记录环境中&#xff0c;数据保护和个⼈隐私⽆疑是⾄关重要的领域。确保敏感数据不被泄露&#xff0c;脱敏处理成为必不可少的⼀步。数据脱敏是⼀种技术⼿段&#xff0c;其将敏感信息转换为不…

ARM 240625

练习&#xff1a; 汇编实现1-100累加&#xff0c;结果保存在r0 .text 声明下面内容都属于文本段内容 .globl _start 声明 _start 是一个全局启用的标签_start: 封装 _start 标签&#xff0c;汇编的标签和C中函数类似mov r0,#0 mov 把0 搬运到 r0 寄存器mov r1,#1 mov 把1 …

【使用webrtc-streamer解析rtsp视频流】

webrtc-streamer WebRTC (Web Real-Time Communications) 是一项实时通讯技术&#xff0c;它允许网络应用或者站点&#xff0c;在不借助中间媒介的情况下&#xff0c;建立浏览器之间点对点&#xff08;Peer-to-Peer&#xff09;的连接&#xff0c;实现视频流和&#xff08;或&a…

Android中ViewModel+LiveData+DataBinding的配合使用(kotlin)

Android 中 ViewModel、LiveData 和 Data Binding 的配合使用&#xff08;Kotlin&#xff09; 摘要 本文将介绍如何在 Android 开发中结合使用 ViewModel、LiveData 和 Data Binding 进行数据绑定和状态更新。我们将详细探讨这三者之间的关系&#xff0c;并展示如何在 Kotlin…