华为oj 超长正整数相加
2015-11-30 11:20
375 查看
解决思路是:将每个字符转换成int类型存放在数组中,然后反向从低位开始相加进位,数组需要反向输出,这样可以保证进位位有存储空间
#include<iostream> #include<string.h> #include<stdlib.h> #define N 10000 using namespace std; void AddLongInteger(char *a,char *b) { int n1 = strlen(a); int n2 = strlen(b); int a1 ; int b1 ; int sum ; memset(a1,0,sizeof(a1)); memset(b1,0,sizeof(b1)); memset(sum,0,sizeof(sum)); int i = n1-1; int j = n2-1; int n=0,m=0; for(;i>=0;i--) { a1[n++] = a[i]-'0'; } for(;j>=0;j--) { b1[m++] = b[j]-'0'; } if(n>m) { for(i=0;i<n;i++) { int temp = a1[i]+b1[i]+sum[i]; /* cout<<"a1[i]"<<a1[i]<<endl; cout<<"b1[i]"<<b1[i]<<endl; cout<<"sum[i]"<<sum[i]<<endl; cout<<"n>m--"<<"n:"<<n<<"m:"<<m<<"i:"<<i<<"temp:"<<temp<<endl;*/ if(temp>=10) { sum[i] = temp - 10; sum[i+1] = 1; } else sum[i] = temp; } if(sum ) cout<<sum ; i--; for(;i>=0;i--) cout<<sum[i]; cout<<endl; } else { for(i=0;i<m;i++) { int temp = a1[i]+b1[i]+sum[i]; /*cout<<"a1[i]"<<a1[i]<<endl; cout<<"b1[i]"<<b1[i]<<endl; cout<<"sum[i]"<<sum[i]<<endl; cout<<"n<m--"<<"n:"<<n<<"m:"<<m<<"i:"<<i<<"temp:"<<temp<<endl;*/ if(temp>=10) { sum[i] = temp - 10; sum[i+1] = 1; } else sum[i] = temp; } if(sum[m]) cout<<sum[m]; i--; for(;i>=0;i--) cout<<sum[i]; cout<<endl; } } int main() { char a ; char b ; scanf("%s",&a); scanf("%s",&b); AddLongInteger(a,b); return 0; }
相关文章推荐
- Masonry简单使用
- Oracle函数创建语法格式
- css自适应media规则
- CountDownLatch简介
- Android Studo 使用 JNI报错:java.lang.UnsatisfiedLinkError: Couldn't load XXX from loader dalvik.system.PathClassLoader
- Java 连oracle 12C 起步_PreparedStatement
- hdu 2955 Robberies 01背包 ★★☆
- 在activity,fragment中获得actionbar的高度
- 关于回车直接执行事件的方法
- iOS URL Scheme 使用详解
- IOS学习之 网络编程(4)--NSURLConnection基本使用
- 关于回车直接执行事件的方法
- Ubuntu 系统备份及恢复
- WPF自定义控件与样式(2)-自定义按钮FButton
- Android intent常见应用总结
- [面试]牛人整理 操作系统、计算机网络、设计模式 、Linux、算法
- Nagios监控ActiveMQ插件开发和部署注意事项
- 字长、字节、Bit、Byte
- 内核通用打印信息
- PendingIntent的内部机制