高精度减法笔记
高精度减法
vector<int>u, v; bool cmp(vector<int> &u, vector<int> &v) {//比较两个数大小 if (u.size() != v.size()) //前数不等于后数 return u.size() > v.size();//返回前数是否大于后数,是=ture,否=false else for (int i = u.size()-1; i >=0; i--) //前数等于后数,遍历数组 if (u[i] != v[i])//从高位开始比较,如果值不同 return u[i] > v[i];//返回前值是否大于后值,是=ture,否=false return 1;//两个数完全相等,返回1或0都行 } vector<int> sub(vector<int>& u, vector<int>& v) {//高精度减法 vector<int> temp;//声明数组存储差值 for (int i = 0, t = 0; i < u.size(); i++) {//以最大数的位数开始遍历,声明定义t作为最大数的每一位的值 t = u[i] - t;//t为最大数当前i位的值减去上一轮借位的值 if (i < v.size())t -= v[i];//当最大数的i位小于最小数的最低位数时,执行两个数的第i位做差 temp.push_back((t + 10) % 10);//给temp数组末尾塞入做差后的值 /*(t + 10) % 10 一石二鸟,当差值t大于0时取对10的余数,差值小于0时,加10就大于0,再对10取余 两种情况都能取得t的最后一位的值,塞入temp的末尾*/ if (t < 0) t = 1;//t小于0时,则借位到下一轮的t else t = 0;//不借位,将t初始化为0,进入下一轮 } while (temp.size() > 1 && temp.back() == 0) temp.pop_back();//若有前导0,则循环清除前导0 return temp;//返回数组 } int main() { string a, b; cin >> a >> b; for (int i = a.size() - 1; i >= 0; i--) u.push_back(a[i] - '0');//倒序读入数组 for (int i = b.size() - 1; i >= 0; i--) v.push_back(b[i] - '0'); if (cmp(u, v)) {//比较两个数大小,分类讨论 vector<int> c = sub(u, v); for (int i = c.size() - 1; i >= 0; i--) printf("%d", c[i]); } else { vector<int>c = sub(v, u); printf("-");//小数减大数,添加负号 for (int i = c.size() - 1; i >= 0; i -- ) printf("%d", c[i]); } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具