华为机试——两个超长正整数的加法 java
2015-08-09 16:16
615 查看
题目描述:请设计一个算法完成两个超长正整数的加法。 要求实现函数: void AddLongInteger(char * pcAddend, char * pcAugend, char * pcAddResult); 输入参数: char * pcAddend:加数 char * pcAugend:被加数 char * pcAddResult:加法结果 返回值:无 | |
运行时间限制: | 1 Sec |
内存限制: | 128 MByte |
输入: | 两个超长正整数的字符串 |
输出: | 相加后结果的字符串 |
样例输入: | 123456789123456789 123456789123456789 |
样例输出: | 246913578246913578 |
plaincopy
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;
}
}
相关文章推荐
- 华为机试题 最小长方形 java 转载
- java多线程零碎知识点
- java中使用字符串或者动态创建对象的三种方法(Class,Constructor,Proxy)
- java jdbc
- 【测试自动化6】城市电话号码 java
- Java设计模式 -- 简单工厂模式(SimpleFactory)
- 怎么用eclipse生成jar文件?eclipse导出jar介绍
- Java聊天模拟
- Java集合使用
- Java关键字instanceof
- java线程总结
- Java学习--(六)数组
- Spring源码学习-4.IoC容器其他特征分析
- Spring_database_Template
- 《深入浅出struts2》--第二十四章,Tiles插件
- 不使用Cygwin,在eclipse中快速开发JNI,一键生成C头文件.h,以及一键使用NDK交叉编译
- 字符串的全排列(java)
- 《Java从入门到精通》第十三章学习笔记
- Java提高篇(三四)-----fail-fast机制
- java中clone源码解析