当前位置: 首页 > news >正文

如何建设小说网站搜索引擎优化是什么?

如何建设小说网站,搜索引擎优化是什么?,wordpress 无法创建目录,郑州网络优化实力乐云seo文章目录 一、为什么需要高精度算法二、高精度算法的数据结构设计2.1 基础工具函数2.2 高精度加法实现2.3 高精度减法实现2.4 高精度乘法实现2.5 高精度除法实现 三、完整测试程序四、总结 一、为什么需要高精度算法 在编程中#xff0c;处理极大数值是常见需求#xff0c;例… 文章目录 一、为什么需要高精度算法二、高精度算法的数据结构设计2.1 基础工具函数2.2 高精度加法实现2.3 高精度减法实现2.4 高精度乘法实现2.5 高精度除法实现 三、完整测试程序四、总结 一、为什么需要高精度算法 在编程中处理极大数值是常见需求例如 密码学中的大数运算如 RSA 算法中的模幂运算科学计算中的高精度数值计算财务系统中的金额处理数学竞赛中的大数问题求解 C 的原生数据类型如long long有固定数值范围限制通常最大约 9×10^18无法处理任意大小的整数。高精度算法通过将大数字拆分为多个小单元处理以字符串或数组存储每一位数字模拟手工计算实现各种运算。 二、高精度算法的数据结构设计 在 C 中我们可以通过纯函数的方式实现高精度算法避免使用类封装使代码更加简洁直接。以下是各个核心功能的实现 2.1 基础工具函数 首先实现一些基础工具函数用于处理字符串表示的大数 #include iostream #include string #include vector #include algorithm #include stdexcept// 反转字符串 std::string reverse(const std::string s) {return std::string(s.rbegin(), s.rend()); }// 去除前导零 std::string removeLeadingZeros(const std::string num) {int i 0;while (i num.size() - 1 num[i] 0) {i;}return num.substr(i); }// 判断是否为负数 bool isNegative(const std::string num) {return num[0] -; }// 获取绝对值 std::string getAbs(const std::string num) {return isNegative(num) ? num.substr(1) : num; }// 比较两个非负数字的大小 bool absGreaterOrEqual(const std::string a, const std::string b) {if (a.length() ! b.length()) {return a.length() b.length();}return a b; }2.2 高精度加法实现 高精度加法的核心思路是模拟手工加法运算从低位到高位逐位相加并处理进位 // 高精度加法 std::string add(const std::string a, const std::string b) {// 处理符号if (isNegative(a) !isNegative(b)) {return subtract(b, getAbs(a));}if (!isNegative(a) isNegative(b)) {return subtract(a, getAbs(b));}if (isNegative(a) isNegative(b)) {return - add(getAbs(a), getAbs(b));}// 两个正数相加std::string result;int carry 0;int i a.size() - 1;int j b.size() - 1;while (i 0 || j 0 || carry 0) {int sum carry;if (i 0) sum a[i--] - 0;if (j 0) sum b[j--] - 0;result.push_back((sum % 10) 0);carry sum / 10;}return removeLeadingZeros(reverse(result)); }2.3 高精度减法实现 高精度减法比加法更复杂需要考虑借位和数字大小比较 // 高精度减法 std::string subtract(const std::string a, const std::string b) {// 处理符号if (isNegative(a) !isNegative(b)) {return - add(getAbs(a), b);}if (!isNegative(a) isNegative(b)) {return add(a, getAbs(b));}if (isNegative(a) isNegative(b)) {return subtract(getAbs(b), getAbs(a));}// 两个正数相减if (!absGreaterOrEqual(a, b)) {return - subtract(b, a);}std::string result;int borrow 0;int i a.size() - 1;int j b.size() - 1;while (i 0) {int diff (a[i] - 0) - borrow;if (j 0) diff - (b[j] - 0);if (diff 0) {diff 10;borrow 1;} else {borrow 0;}result.push_back(diff 0);i--;j--;}return removeLeadingZeros(reverse(result)); }2.4 高精度乘法实现 高精度乘法通常采用竖式乘法的思路时间复杂度为 O (n²) // 高精度乘法 std::string multiply(const std::string a, const std::string b) {// 处理零的情况if (a 0 || b 0) {return 0;}// 处理符号bool isNegative (isNegative(a) !isNegative(b)) || (!isNegative(a) isNegative(b));std::string absA getAbs(a);std::string absB getAbs(b);// 结果数组长度为两数位数之和std::vectorint result(absA.size() absB.size(), 0);// 竖式乘法核心逻辑for (int i absA.size() - 1; i 0; i--) {for (int j absB.size() - 1; j 0; j--) {int product (absA[i] - 0) * (absB[j] - 0);int sum product result[i j 1];result[i j 1] sum % 10;result[i j] sum / 10;}}// 转换结果数组为字符串std::string resultStr;for (int num : result) {if (!(resultStr.empty() num 0)) {resultStr.push_back(num 0);}}return (isNegative ? - : ) resultStr; }2.5 高精度除法实现 高精度除法是最复杂的运算这里采用试商法实现 // 高精度除法 std::string divide(const std::string a, const std::string b) {// 处理除数为零的情况if (b 0) {throw std::runtime_error(Division by zero);}// 处理零的情况if (a 0) {return 0;}// 处理符号bool isNegative (isNegative(a) !isNegative(b)) || (!isNegative(a) isNegative(b));std::string absA getAbs(a);std::string absB getAbs(b);// 处理被除数小于除数的情况if (!absGreaterOrEqual(absA, absB)) {return 0;}// 试商法核心逻辑std::string quotient;std::string remainder;for (char c : absA) {remainder c;remainder removeLeadingZeros(remainder);int count 0;while (absGreaterOrEqual(remainder, absB)) {remainder subtract(remainder, absB);count;}quotient std::to_string(count);}quotient removeLeadingZeros(quotient);return (isNegative ? - : ) quotient; }// 高精度取模 std::string mod(const std::string a, const std::string b) {if (b 0) {throw std::runtime_error(Modulo by zero);}if (a 0) {return 0;}bool isNegative isNegative(a);std::string absA getAbs(a);std::string absB getAbs(b);if (!absGreaterOrEqual(absA, absB)) {return a;}std::string quotient divide(absA, absB);std::string product multiply(quotient, absB);std::string remainder subtract(absA, product);return (isNegative ? - : ) remainder; }三、完整测试程序 下面是一个完整的测试程序展示如何使用上述高精度算法 // 测试程序 int main() {try {// 测试加法std::cout 加法测试: 12345 67890 add(12345, 67890) std::endl;// 测试减法std::cout 减法测试: 98765 - 12345 subtract(98765, 12345) std::endl;// 测试乘法std::cout 乘法测试: 1234 * 5678 multiply(1234, 5678) std::endl;// 测试除法std::cout 除法测试: 123456789 / 12345 divide(123456789, 12345) std::endl;// 测试取模std::cout 取模测试: 123456789 % 12345 mod(123456789, 12345) std::endl;// 测试负数运算std::cout 负数测试: std::endl;std::cout -123 456 add(-123, 456) std::endl;std::cout 123 - (-456) subtract(123, -456) std::endl;std::cout -123 * (-456) multiply(-123, -456) std::endl;std::cout -12345 / 67 divide(-12345, 67) std::endl;} catch (const std::exception e) {std::cerr 错误: e.what() std::endl;return 1;}return 0; }四、总结 高精度算法是处理大数运算的基础其核心在于 将大数字拆分为小单元处理模拟手工计算过程进位、借位、试商等合理处理符号和边界情况 理解高精度算法不仅有助于解决实际问题还能加深对数字运算本质的理解。在密码学、科学计算等领域高精度算法更是不可或缺的基础工具。
http://www.hkea.cn/news/14404835/

相关文章:

  • 阿里云网站建设的功能培训美工设计师
  • 天津网站设计建设免费注册域名方法
  • js网站计数器代码百度域名的书写
  • 做外贸英语要什么网站北京网站建设 shwl
  • 昭通网站seo网站建设案例行情
  • 房地产公司网站模板什么主题的网站容易做
  • 网页模板免费源码网站seo诊断报告例子
  • 淘宝联盟网站推广怎么做wordpress标签使用方法
  • 网站系统找不到指定的文件怎么做轮胎网站
  • 照片网站怎么做网页制作学什么软件好
  • 购物网站名字建设部举报网站
  • 公司电子商务平台和企业网站建设和维护工作管理办法Linux备份wordpress
  • 学网站建设语言expression wordpress主题
  • 维影企业网站管理系统石家庄网络公司有哪些
  • 信用中国网站建设知名网站建设商家
  • 亿藤互联网站建设开发购买域名流程
  • 网站以前在百度能搜索不到淮南家政网站建设地址
  • 北京品牌高端网站建设公司网站建站和维护
  • 列举电子商务网站建设需要的语言网站改手机版
  • 罗湖做网站哪家专业上海高端网站建设公司
  • 求制作网站高清做视频在线观看网站
  • 安顺网站设计好用的html编辑器
  • 怎么用vs做网站开发wordpress模板使用
  • 网站建设市场分析报告个人网站模板flash
  • 网站建设做软件开发吗公司网站建设项目的成本计划
  • 网站做次级页面网站流量所需的成本.
  • 大型门户网站建设流程上海企业网站建设推荐
  • 宝安附近做网站公司公司做营销型网站
  • 做一视频网站多少钱台州网站建设多少钱
  • 网站关键词公司找做网站公司需要注意什么条件