华为机试——两个超长正整数的加法 java
来源:互联网 发布:手机蓝牙网络共享电脑 编辑:程序博客网 时间:2024/05/16 10:58
题目描述:请设计一个算法完成两个超长正整数的加法。
要求实现函数:
void AddLongInteger(char * pcAddend, char * pcAugend, char * pcAddResult);
输入参数:
char * pcAddend:加数
char * pcAugend:被加数
char * pcAddResult:加法结果
返回值:无
运行时间限制:1 Sec内存限制:128 MByte输入:两个超长正整数的字符串
输出:相加后结果的字符串
样例输入:123456789123456789 123456789123456789样例输出:
246913578246913578
- import java.util.Arrays;
- import java.util.Scanner;
- public class Main {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- Scanner sc = new Scanner(System.in);
- char[] a1 = sc.next().toCharArray();
- char[] a2 = sc.next().toCharArray();
- char[] result = AddLongInteger(a1,a2);
- for(int i = 0;i < result.length;i++){
- System.out.print(result[i]);
- }
- }
- /*
- * AddLongInteger(char[] a1, char[] a2)的思想:
- * 首先:a1[0]对应的是第一个被加数的最高位,a2[0]同样,所以做加法的时候应该从a1[a1.length-1]位开始,或者将a1前后转置
- * 然后加法的计算是:(a1[1]+a2[1]+进位)%10 进位=(a1[1]+a2[1]+进位)/10
- * 然后就是字符与数字之前的转换,千万不要搞混
- */
- public static char[] AddLongInteger(char[] a1, char[] a2){
- int len=0;
- if(a1.length > a2.length){
- len = a1.length + 1;
- }else{
- len = a2.length + 1;
- }
- char[] temp = new char[len];
- char[] result;
- char[] b1 = new char[a1.length];
- char[] b2 = new char[a2.length];
- for(int i = 0;i < a1.length;i++){
- b1[a1.length - 1 - i] = a1[i];
- }
- for(int i = 0;i < a2.length;i++){
- b2[a2.length - 1 - i] = a2[i];
- }
- for(int i = 0; i < temp.length; i++){
- temp[i] = '0';
- }
- for(int i = 0; i < len-1;i++){
- int res = 0;
- if(b1.length -1 - i >=0 && b2.length -1 - i >= 0){
- res = b1[i] - '0' + b2[i] - '0';
- }else if(b1.length -1 - i >= 0 && b2.length -1 - i < 0){
- res = b1[i] - '0';
- }else if(b1.length -1 - i < 0 && b2.length -1 - i >= 0){
- res = b2[i] - '0';
- }
- int value = temp[i]-'0'+res;
- temp[i] = (char) (value%10 + '0') ;
- temp[i+1] += value/10;
- // System.out.println(temp[i]);
- // System.out.println(temp[i+1]);
- }
- while(temp[len - 1] == '0'){
- len--;
- }
- result = new char[len];
- int s = result.length;
- for(int i = 0;i < s; i++){
- result[s-1-i] = temp[i];
- }
- return result;
- }
- }
0 0
- 华为机试——两个超长正整数的加法
- 华为机试——两个超长正整数的加法 java
- 华为机试——两个超长正整数的加法 java
- 两个超长正整数的加法
- 完成两个超长正整数的加法
- 超长正整数的加法
- 超长正整数的加法
- 华为机试---超长正整数相加
- 华为OJ——超长正整数相加
- 华为OJ——超长正整数相加
- 华为OJ——超长正整数相加
- 2015华为机试练习-超长正整数相加
- 华为机试: 按字节截取字符串、超长正整数相加
- 华为机试题:超长正整数相加
- 华为机试题-超长正整数相加
- 【华为OJ】超长正整数相加
- 【华为oj】超长正整数相加
- 华为oj 超长正整数相加
- python 爬虫中文乱码问题
- UVa 537 Artificial Intelligence?
- JavaScript面向对象精要
- Oracle归档模式与非归档模式设置
- 黑马程序员——其他8:eclipse使用技巧总结
- 华为机试——两个超长正整数的加法 java
- 操作系统面试题整理
- hdu 1078 记忆化搜索
- 【屌丝程序的口才逆袭演讲稿50篇】第十三篇:爱迪生欺骗了我们!【张振华.Jack】
- C++中虚函数内存布局
- 音乐录像带第三版之与音乐同步输出图形
- MinGW 使用 mintty 终端替代默认终端以解决界面上复制与粘贴的问题
- nginx源码分析2———基础数据结构三(内存池)
- Infinispan学习笔记(一)