51nod 1005 大数加法(可为负数)
2016-05-20 13:12
465 查看
给出2个大整数A,B,计算A+B的结果。
Input
Output
没什么思路,就是转化为字符串之后模拟。
Input
第1行:大数A 第2行:大数B (A,B的长度 <= 10000 需注意:A B有可能为负数)
Output
输出A + B
没什么思路,就是转化为字符串之后模拟。
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> using namespace std; int const maxn = 100005; char A[maxn],B[maxn]; int fa,fb; void add(char* a,char* b) { int c[maxn]; int la = strlen(a)-1; int lb = strlen(b)-1; int cnt = 0 ; int num = 0 ; if(fa) { cout<<"-"; } while(la>=fa&&lb>=fb) { c[num++] = (a[la] -'0'+ b[lb]-'0' + cnt)%10 ; cnt = (a[la--] -'0'+ b[lb--]-'0' + cnt)/10; } while(la>=fa) { c[num++] = (a[la]-'0' + cnt)%10; cnt = (a[la--]-'0'+cnt)/10; } while(lb>=fb) { c[num++] = (b[lb] -'0'+ cnt)%10; cnt = (b[lb--]-'0'+cnt)/10; } if(cnt) c[num++]=cnt; for(int i = num-1 ; i>=0 ; i--)cout<<c[i]; cout<<endl; } int cmp(char *a, char *b) { int la = strlen(a); int lb = strlen(b); if(la-fa>lb-fb) return 1; else if(la-fa<lb-fb) return 0; else { int i ; for(i=0 ; i<la&&a[i+fa]==b[i+fb] ; ++i); return a[i+fa]>b[i+fb]; } } void minu(char *a,char *b) { if(!cmp(a,b)) { //保证a的绝对值大于b if(fb)cout<<"-"; char *t; t = a ; a = b ; b = t ; int f; f = fa ; fa = fb ; fb = f; } else if(fa)cout<<"-"; int la = strlen(a)-1; int lb = strlen(b)-1; int cnt = 0 ; int num = 0 ; int c[maxn]; while(la>=fa&&lb>=fb) { c[num++] = (a[la] - '0' - cnt - (b[lb] - '0') + 10 )%10; cnt = (a[la--]-'0'-cnt < (b[lb--] - '0')); } while(la>=fa) { c[num++] = (a[la] - '0' - cnt + 10 )%10; cnt = (a[la--]-'0'-cnt < 0); } int i = num-1 ; for(; i>=0 ; i--)if(c[i])break; for( ;i>=0 ; i--)cout<<c[i]; cout<<endl; } int main() { cin>>A>>B; fa = (A[0]=='-'); fb = (B[0]=='-'); if(fa!=fb) { //一正一负 minu(A,B); } else { //相加 add(A,B); } return 0; }
相关文章推荐
- Unable to ignore resources
- python爬虫--连接数据库
- 记一次黑苹果更换硬盘之旅
- 核桃的数量---最小公倍数
- UTMI及USB 2.0 PHY高速传输特性分析
- Linux ps命令详解与示例说明
- Advice for students of machine learning
- jquery管理ajax异步-deferred对象
- JAXB - Annotations, The Object Factory: XmlRegistry, XmlElementDecl
- linux 读取文件信息并且输出
- 《构建之法》阅读笔记08-软件设计与实现
- MySQL数据类型
- 如何获取闭包中循环的i值
- 项目 Web 的 NuGet 程序包还原失败: 找不到“1.0.0”版本的程序包“Microsoft.Net.Compilers”。。 0
- struts2中的几个技术
- 《招一个靠谱的移动开发》iOS面试题及详解(上篇)
- 工作总结与感悟
- 《招一个靠谱的移动开发》iOS面试题及详解(上篇)
- C++生成n个指定1到 n 不同的随机数
- STM32F4时钟设置分析