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

高精度运算(string函数)

高精度加法

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string _add(string s1,string s2);
int main()
{string a,b;cin>>a>>b;cout<<_add(a,b);return 0;
}
string _add(string s1,string s2)
{reverse(s1.begin(),s1.end());reverse(s2.begin(),s2.end());int a[1000] = {0};int b[1000] = {0};int c[1000] = {0};int l1 = s1.size();int l2 = s2.size();for(int i = 0;i<l1;i++){a[i] = s1[i] - 48;}for(int i = 0;i<l2;i++){b[i] = s2[i] - 48;}for(int i = 0;i<max(l1,l2);i++){c[i] = a[i] + b[i];}for(int i = 0;i<max(l1,l2);i++){if(c[i]>=10){c[i+1] = c[i+1]+1;c[i] = c[i] - 10;}}int p = -1;for(int i = max(l1,l2)+1;i>=0;i--){if(c[i]!=0){p = i;break;}}if(p == -1) return "0";string res = "";for(int i = p;i>=0;i--){res = res + (char)(c[i]+48);}return res;
}

高精度减法

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string _jian(string s1,string s2);
bool cmp(string s1,string s2);
int main()
{string a,b;cin>>a>>b;cout<<_jian(a,b);return 0;
}
bool cmp(string s1,string s2)
{if(s1.size() == s2.size()) return s1>s2;else return s1.size()>s2.size();
}
string _jian(string s1,string s2)
{string op = "";bool f = cmp(s1,s2);if(f == false){op = "-";swap(s1,s2);}reverse(s1.begin(),s1.end());reverse(s2.begin(),s2.end());int a[1000] = {0};int b[1000] = {0};int c[1000] = {0};int l1 = s1.size();int l2 = s2.size();for(int i = 0;i<l1;i++){a[i] = s1[i]-48;}for(int i = 0;i<l2;i++){b[i] = s2[i]-48;}for(int i = 0;i<l1;i++){c[i] = a[i] - b[i];}for(int i = 0;i<l1;i++){if(c[i]<0){c[i+1] = c[i+1]-1;c[i] = c[i] + 10;}}int p = -1;for(int i = l1;i>=0;i--){if(c[i]!=0){p = i;break;}}string res = op;for(int i = p;i>=0;i--){res = res + (char)(c[i]+48);}return res;
}


高精度乘法

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string _cheng(string s1,string s2);
int main()
{string a,b;cin>>a>>b;cout<<_cheng(a,b);return 0;
}
string _cheng(string s1,string s2)
{reverse(s1.begin(),s1.end());reverse(s2.begin(),s2.end());int a[1000]={0};int b[1000]={0};int c[2000]={0};int l1 = s1.size();int l2 = s2.size();for(int i = 0;i<l1;i++){a[i] = s1[i]-48;}for(int i = 0;i<l2;i++){b[i] = s2[i]-48;}for(int i = 0;i<l1;i++){for(int j = 0;j<l2;j++){c[i+j] = c[i+j] + a[i]*b[j];}}for(int i = 0;i<l1+l2;i++){if(c[i]>=10){c[i+1] = c[i+1] + c[i]/10;c[i] = c[i]%10;}}int p = -1;for(int i = l1+l2;i>=0;i--){if(c[i]!=0){p = i;break;}}if(p == -1) return "0";string res = "";for(int i = p;i>=0;i--){res = res + (char)(c[i]+48);}return res;
}


高精度除法

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string _chu(int a,int b,int k);
int main()
{int c,d,e;cin>>c>>d>>e;cout<<_chu(c,d,e);return 0;
}
string _chu(int a,int b,int k)
{string res = "";if(k==0) res = to_string(a/b);else res = to_string(a/b)+".";for(int i = 0;i<k;i++){a = a%b*10;res = res + to_string(a/b);}return res;
}
http://www.xdnf.cn/news/2155.html

相关文章:

  • 【Linux应用】交叉编译环境配置,以及最简单粗暴的环境移植(直接从目标板上复制)
  • 【OSG学习笔记】Day 10: 字体与文字渲染(osgText)
  • ※※惯性时间常数与系统惯量定义、区别、联系
  • 水果成篮--LeetCode
  • Java—— 包装类
  • Arduino+ESP01S烧录
  • AudioVideoMerger 下载与使用
  • 计算机网络 | 应用层(1)--应用层协议原理
  • Git 工具的安装
  • django之优化分页功能(利用参数共存及封装来实现)
  • 一篇入门之-评分卡变量分箱(卡方分箱、决策树分箱、KS分箱等)实操例子
  • 软件开发架构设计原则详解(含案例)
  • 精益数据分析(28/126):解读商业模式拼图与关键指标
  • KTT入门
  • 现代化Android开发:Compose提示信息的最佳封装方案
  • qt事件过滤与传递机制
  • 关于图论的知识
  • 2025.4.26总结
  • GitOps进化:深入探讨 Argo CD 及其对持续部署的影响
  • 图像特征检测算法对比及说明
  • FPGA前瞻篇-数字电路基础-逻辑门电路设计
  • ssm乡村合作社商贸网站设计与实现(源码+lw+部署文档+讲解),源码可白嫖!
  • 【C】初阶数据结构13 -- 快速排序
  • Pygame物理模拟:实现重力、弹跳与简单物理引擎
  • DAM-3B,英伟达推出的多模态大语言模型
  • IntelliJ IDEA 2025.2 和 JetBrains Rider 2025.1 恢复git commit为模态窗口
  • 23种设计模式-行为型模式之迭代器模式(Java版本)
  • 测试基础笔记第十三天
  • 工业摄像头通过USB接口实现图像
  • STL中emplace实现原理是什么?