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

淮安网站建设电话开源镜像网站怎么做

淮安网站建设电话,开源镜像网站怎么做,扬州网站推广,租房网58同城网租房前言 高精度算法就是为了去解决一些比较大的数#xff0c;这些数大到long long都存不下。#xff0c;这里的主要思想就是用字符串来存。 下面的内容有很多用到c的容器#xff0c;不明白的可以先去学习stl。 一 高精度加法 首先第一步就是去模拟我们自己写的加法#xff…前言 高精度算法就是为了去解决一些比较大的数这些数大到long long都存不下。这里的主要思想就是用字符串来存。 下面的内容有很多用到c的容器不明白的可以先去学习stl。 一  高精度加法 首先第一步就是去模拟我们自己写的加法从我们自己写的加法上面来看第一它是从个位开始加如果大于10就会产生进位这个进位要加到下一位去。 我们写加法是从个位开始但是用代码去写就需要倒过来因为个位是不好去进位的如果用个位去进位那么就会导致整块的移动这样效率就会很低了 图一是我们自己算图二则是我们用代码去实现的过程 所以有了上面的准备就可以写出下面代码 #includeiostream #includevector using namespace std;vectorint add(const vectorint A, const vectorint B)//加法函数这里传引用是为了提高效率 {int t 0;vectorintC;//用来返回for (int i 0; i A.size(); i)//因为之前已经逆序了所以这里直接从0开始遍历{t A[i];//首先把最长的数的最后一位加上if (i B.size()) t B[i];//因为B短所以我们需要去判断B是否已经结束C.push_back(t % 10);//最后我们是插入t%10,如果大于就进位小于就不进位t / 10;//这里相当于是进位的过程}if (t) C.push_back(1);//还有A结束的时候可能还有一个进位没有处理这里把它尾插return C; }int main() {string a, b;vectorintA, B, C;cin a b;for (int i a.size()-1; i 0; i--)//逆置{A.push_back(a[i] - 0);//转换}for (int i b.size() - 1; i 0; i--){B.push_back(b[i] - 0);}if (A.size() B.size()) C add(A, B);//这里是调整A,B那个数长长的放上面比较好操作else C add(B, A);for (int i C.size()-1; i 0; i--)//因为是逆序相加的所以这里需要再逆序倒过来输出{cout C[i];}cout endl;return 0;} 主函数里面的处理还是比较简单的关键在于两个数的相加 二  高精度减法 其实减法也差不多一样的反转但是不同的就是我们需要用一个数去存一个借位而不是进位因为一个数减另外一个数不够我们就需要去借位这样才能够减第二就是我们在进行减法的时候需要的是去判断两个数的大小哪个更加大而不是和加法一样去判断长度。 一样的下面看代码理解 bool cmp(vectorint A, vectorint B)//比较函数 {if (A.size() ! B.size())return A.size() B.size();for (int i A.size() - 1; i 0; i--){if (A[i] ! B[i])return A[i] B[i];}return true; }vectorint sub(vectorint A, vectorint B)//减法函数 {int t 0;vectorintC;for (int i 0; i A.size(); i){t A[i] - t;//一开始没有借位if (i B.size()) t - B[i];C.push_back((t 10) % 10);//这个是如果t0,说明没有借位如果小于0就借位了//这里10是先算它进位然后再%10,如果没有进位那就是它本身//如果进位了那我们插入的就是10-t;if (t 0) t 1;//借位等于1下次循环A[i]就需要-1else t 0;}while (C.size() 1 C.back() 0)C.pop_back();//这里需要去掉前导零return C; } int main() {string a, b;vectorintA, B, C;cin a b;for (int i a.size()-1; i 0; i--)//这里操作和加法是一样的{A.push_back(a[i] - 0);}for (int i b.size() - 1; i 0; i--){B.push_back(b[i] - 0);}if (cmp(A, B)) C sub(A, B);//这是判断大小else C sub(B, A), cout -;//如果A小于B,那么我们可以换成-B-A//这里要多输出一个符号for (int i C.size()-1; i 0; i--){cout C[i];}cout endl;return 0;} 三  高精度乘法 关于高精度乘法来说就没有减法那么多处理了甚至比加法还简单一点这里的乘法是一个多位数和一个低位数的相乘 vectorint mul(vectorint A, int b) {int t 0;vectorintC;for (int i 0; i A.size(); i){t A[i] * b;//t是进位C.push_back(t % 10);t / 10;}if (t) C.push_back(t);//最后一位有进位就插入while (C.size() 1 C.back() 0) C.pop_back();//处理前导零return C; }int main() {string a;//这里直接正常操作就行int b;vectorintA, C;cin a b;for (int i a.size()-1; i 0; i--){A.push_back(a[i] - 0);}C mul(A, b);for (int i C.size()-1; i 0; i--){cout C[i];}cout endl;return 0;} 四  高精度除法 这里的除法和其他的又有点不一样但是不一样的不会很多第一就是我们除一个数可能除不尽所以这里需要一个余数去存。 vectorint div(vectorint A, int b,int r) {r 0;vectorintC;for (int i A.size()-1; i 0; i--)//这里和其他的不一样因为我们除法只能从个位开始除{r r * 10 A[i];//这里表示余数和下一个数的相加C.push_back(r / b);r % b;}reverse(C.begin(), C.end());//这里因为上面的操作把C变为正序了所以这里要反过来因为//后面打印是按逆序打印这里就和上面同一了while (C.size() 1 C.back() 0)C.pop_back();//去前导零return C; }int main() {string a;int b;vectorintA, C;cin a b;for (int i a.size()-1; i 0; i--)//这里操作和上面差不多{A.push_back(a[i] - 0);}int r;C div(A, b,r);for (int i C.size()-1; i 0; i--){cout C[i];}cout endl;cout r;return 0;} 五 练习 a-b 这里直接用上面的代码就行 #include iostream #include vectorusing namespace std; bool cmp(vectorint A, vectorint B)//比较函数 {if (A.size() ! B.size())return A.size() B.size();for (int i A.size() - 1; i 0; i--){if (A[i] ! B[i])return A[i] B[i];}return true; }vectorint sub(vectorint A, vectorint B)//减法函数 {int t 0;vectorintC;for (int i 0; i A.size(); i){t A[i] - t;//一开始没有借位if (i B.size()) t - B[i];C.push_back((t 10) % 10);//这个是如果t0,说明没有借位如果小于0就借位了//这里10是先算它进位然后再%10,如果没有进位那就是它本身//如果进位了那我们插入的就是10-t;if (t 0) t 1;//借位等于1下次循环A[i]就需要-1else t 0;}while (C.size() 1 C.back() 0)C.pop_back();//这里需要去掉前导零return C; } int main() {string a, b;vectorintA, B, C;cin a b;for (int i a.size()-1; i 0; i--)//这里操作和加法是一样的{A.push_back(a[i] - 0);}for (int i b.size() - 1; i 0; i--){B.push_back(b[i] - 0);}if (cmp(A, B)) C sub(A, B);//这是判断大小else C sub(B, A), cout -;//如果A小于B,那么我们可以换成-B-A//这里要多输出一个符号for (int i C.size()-1; i 0; i--){cout C[i];}cout endl;return 0;} ab #define _CRT_SECURE_NO_WARNINGS 1 #includeiostream #includevector using namespace std; const int N 1e6 10; vectorintadd(vectorint A, vectorint B) {vectorintC;int t 0;for (int i 0; i A.size() || i B.size(); i){if (i A.size()) t A[i];if (i B.size()) t B[i];C.push_back(t % 10);t / 10;}if (t)C.push_back(1);return C;} int main() {string a, b;cin a b;vectorintA, B;for (int i a.size() - 1; i 0; i--) A.push_back(a[i] - 0);for (int i b.size() - 1; i 0; i--) B.push_back(b[i] - 0);vectorintC;C add(A, B);for (int i C.size() - 1; i 0; i--){cout C[i];}return 0; } 六  总结 以上高精度算法加法和乘法比较简单除法和减法需要一点细节理解 加法没有去前导零的操作其他都有以上就是高精度的全部内容了希望对你有所帮助
http://www.zqtcl.cn/news/331911/

相关文章:

  • mvc 做网站国内的搜索引擎有哪些
  • 设计视频网站腾讯云服务器网站域名备案
  • 网站建设费算费用还是固定资产镇赉县做网站的
  • 山西 旅游 英文 网站建设wordpress 设置登陆界面
  • 电商网站系统建设考试深圳网站建设培训哪家好
  • 工作室 网站项目策划书八篇案例
  • ui做网站流程建设统计网站进不去
  • 沧州网站建设优化公司网站改版
  • 网站开发工程师好不好注册科技公司流程和费用
  • wordpress站点费用vs手表官网
  • 网站买卖需要注意什么景安怎么把网站做别名
  • 网站建设网站建怎么做一个门户网站
  • 站长工具域名备案查询安卓app开发教程视频免费
  • 赶集网网站建设分析河南郑州旅游网站设计
  • 怎么可以黑网站域名建设网站的网站是什么
  • 帝国网站数据库配置文件建筑人才网招聘网官网首页
  • c 做的网站怎么上传图片阿里巴巴网站建设的目的
  • 保定模板建站平台微网站怎么做的好
  • 肇庆网站建设方案维护做学校网站素材图片素材
  • 新潮远网站建设建什么类型个人网站
  • 泉州中小企业网站制作洛浦县网站建设
  • 做游戏视频网站用什么程序好wordpress 地址修改
  • 大连的网站建设阳西网站seo
  • 网站制作电话多少网站商品图片怎么做
  • 定制做网站平台网站什么情况要更新
  • 上海网站建设哪家国外有哪些网站可以做电商
  • 网络软文推广网站wordpress仿站抓取软件
  • 安徽圣力建设集团网站当当网站建设与易趣网站对比
  • 长沙网站设计制作DW做注册网站
  • 商城设计网站关键词的优化在哪做