学习c++第九记(高精度加法)
2021/11/11 1:10:13
本文主要是介绍学习c++第九记(高精度加法),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
因为,这是小学思维就不再多加说明,所以我决定直接贴代码。
其实减法也做了,如果实在没写的了,俺可能就贴出来了(手动秃头)。
这里是定义数字最大为1e240(原题是这样写的),开到了250只是因为,有学长说要有习惯开的数据比题上的数据大一点,可以避免一些麻烦。
#include <bits/stdc++.h> using namespace std; typedef long long ll; char a[250] , b[250];//字符串 int main () { ll c[250];//数组 cin >> a >> b; ll i = strlen (a) - 1 , j = strlen (b) - 1;//得到a,b分别是多少位数,包括前导零 //因为是从最低位开始加,所以即使有前导零,也不会发生错位相加的情况 ll s = max (i , j);//按最长的那一个数的最后一个位置开始加 ll n = s , flag = 0; while(i >= 0|| j >= 0){ if(i < 0) { c[s] = b[j] - 48 + flag; flag = 0; }//如果a的位数更多,包括前导零 else if (j < 0){ c[s] = a[i] - 48 + flag; flag = 0; } //如果b的位数更多,包括前导零 else { c[s] = (a[i] - 48) + (b[j] - 48) + flag; } if(c[s] >= 10){ c[s] -= 10; flag = 1;//如果这一位的数字对应相加超过了10,则记flag为1,方便进位 }else flag = 0; s --; i --; j --; if (i < 0 && j < 0 && flag == 1)cout << flag;//如果最高位相加仍然超过了10的情况 } ll d = 0; for(ll k = 0 ; k <= n ; k ++){ if(c[k] == 0 && d == 0 && flag == 0)continue;//不输出前导零 else { cout << c[k]; d = 1;//这样可以避免例如,101中间的0不被输出 } } return 0; }
注:这里利用了一下符号数字和数字本身的ASCII码值相差为固定的48。
这篇关于学习c++第九记(高精度加法)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-23新能源车企如何通过CRM工具优化客户关系管理,增强客户忠诚度与品牌影响力
- 2024-12-23原创tauri2.1+vite6.0+rust+arco客户端os平台系统|tauri2+rust桌面os管理
- 2024-12-23DevExpress 怎么实现右键菜单(Context Menu)显示中文?-icode9专业技术文章分享
- 2024-12-22怎么通过控制台去看我的页面渲染的内容在哪个文件中呢-icode9专业技术文章分享
- 2024-12-22el-tabs 组件只被引用了一次,但有时会渲染两次是什么原因?-icode9专业技术文章分享
- 2024-12-22wordpress有哪些好的安全插件?-icode9专业技术文章分享
- 2024-12-22wordpress如何查看系统有哪些cron任务?-icode9专业技术文章分享
- 2024-12-21Svg Sprite Icon教程:轻松入门与应用指南
- 2024-12-20Excel数据导出实战:新手必学的简单教程
- 2024-12-20RBAC的权限实战:新手入门教程