c++实现大数加法(含负数)
来源:互联网 发布:数据统计量 编辑:程序博客网 时间:2024/05/22 00:27
题外话
一直想好好的把所有大数操作好好敲一遍,都止于惰性,碰到一个要用到大数的题,索性就由此开始吧。
大数加法写过太多次了,含负数的第一次写,用运算符重载的形式实现,挺有意思。
思路
当两数符号相同时,相加即可,重点内容结果符号不变。
不同时,需要对两数的绝对值进行比较,结果符号与绝对值大的数符号相同,然后用大的减去小的。
代码
#include <stdio.h>#include <iostream>#include <vector>#include <math.h>#include <algorithm>#include <queue>#include <string.h>#include <set>#include <stack>#include <stdlib.h>#include <time.h>using namespace std;struct Node{ int d[10009]; int len; bool f; Node() {memset(d, 0, sizeof(d));} Node(char *s) { memset(d, 0, sizeof(d)); if(s[0] == '-') f = 1, s++; else f = 0; int i = 0; while(s[i] != '\0') { d[i] = s[i] - '0'; ++i; } len = i; for(int i=0,j=len-1; i<j; i++,j--) swap(d[i],d[j]); } bool operator < (const Node &t) const { if(this->len == t.len) { for(int i=t.len-1; i>=0; i--) { if(this->d[i] < t.d[i]) return true; else if(this->d[i] > t.d[i]) return false; } } return this->len <= t.len; } Node operator + (const Node &t) const { Node ans; if(t.f == this->f)//符号相同 { ans.f = this->f; int len = max(t.len, this->len); ans.len = len; for(int i=0;i<len;i++) { ans.d[i] += this->d[i] + t.d[i]; ans.d[i+1] += ans.d[i] / 10; ans.d[i] %= 10; } if(ans.d[len] != 0) ans.len++; while(ans.len > 1 && ans.d[ans.len-1] == 0) ans.len--; } else { if(t < (*this)) ans = (*this) - t; else ans = t - (*this); } return ans; } Node operator - (const Node &t) const { Node ans; ans.f = this->f; int len = this->len; ans.len = len; for(int i=0;i<len;i++) { ans.d[i] += this->d[i] - t.d[i]; if(ans.d[i] < 0) { ans.d[i] += 10; ans.d[i+1]--; } } while(ans.len > 1 && ans.d[ans.len-1] == 0) ans.len--; return ans; }};char str[10009];int main(){ cin>>str; Node a(str); cin>>str; Node b(str); Node ans = a + b; if(ans.f) cout<<"-"; for(int i=ans.len-1; i>=0; i--) cout<<ans.d[i]; return 0;}
Case 1:
68932147586
468711654886
537643802472Case 2:
-324234
1212531
888297Case 3:
-2395235
-988973434
-991368669
0 0
- c++实现大数加法(含负数)
- 大数加法的实现(不考虑负数)
- 大数加法 可为负数
- 大数加法(考虑负数)
- 大数运算-加法(C/C++实现)
- C语言 加法 大数加法
- 大数加法模板(c++)
- C语言大数加法
- 大数加法(C语言)
- 大数 加法 c语言
- C语言大数加法
- C语言大数加法
- c语言大数加法
- C语言-大数加法
- 大数乘法、大数加法实现
- 大数加法.重载实现
- JAVA实现大数加法
- 大数加法的实现
- Lattice DCS (Dynamic Clock Select)
- C++关于迭代器删除(erase)插入(insert)失效问题http://m.blog.csdn.net/blog/a327369238/26715187
- iOS开发:同步方法中混杂异步方法,导致异步方法还没有回调,同步方法就返回了值,因此返回了nil。解决方法
- SpringMVC 过滤器Filter使用解析
- centos =>centos安装软件的两种命令rpm,yum
- c++实现大数加法(含负数)
- Activity主窗口与软键盘的交互模式
- 网页布局基础
- 笔记-侧边栏效果
- 设计模式的思考
- Spark修炼之道(高级篇)——Spark源码阅读:第十二节 Spark SQL 处理流程分析
- 继承的利弊和使用原则
- js 类型转换
- Android Handle机制浅析