两个很大很大整数相加的问题

grass_12 2007-07-11 05:13:40
public class TestNumber {


public static void main(String[] args) {
String number1 = "335426587768665654444444444444444444445434";
String number2 = "33439985555555544444444444444444444445535426587768665655434";
char[] num1 = number1.toCharArray();
char[] num2 = number2.toCharArray();
boolean isLarge = false;
int length = num1.length > num2.length ? num2.length : num1.length;
int maxLength=num1.length > num2.length ? num1.length : num2.length;
char[] sChar= new char[maxLength];
for (int i = length-1 ; i >= 0; i--) {
int result = 0;
if (isLarge==true) {
result = (int) (num1[i] - '0') + (int) (num2[maxLength-length+i] - '0') + 1;
} else {
result = (int) (num1[i] - '0') + (int) (num2[maxLength-length+i] - '0');
}
if(result>=10){
result-=10;
isLarge=true;
}else{
isLarge=false;
}
sChar[maxLength-length+i]=(char)(result+(int)'0');
}
for(int i=maxLength-length-1;i>=0;i--){
int result = 0;
if (isLarge) {
result = (int) (num2[i] - '0') + 1;
} else {
result = (int) (num2[i] - '0');
}
if(result>=10){
result-=10;
isLarge=true;
}else{
isLarge=false;
}
sChar[i]=(char)(result+(int)'0');
}
for(int i=0;i<sChar.length;i++){
System.out.print(sChar[i]);
}
System.out.println();
System.out.println(sChar);
}
}

...全文
357 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ChDw 2007-07-12
  • 打赏
  • 举报
回复
最简单当然是使用BigInteger,简单。如果一定自己写也不复杂
String number1 = "335426587768665654444444444444444444445434";
String number2 = "33439985555555544444444444444444444445535426587768665655434";
char[] buff = new char[Math.max(number1.length(), number2.length())];
int carry = 0;
for(int i = buff.length - 1; i >= 0 ; i--) {
int num = carry;
int number1Index = number1.length() - (buff.length - i);
int number2Index = number2.length() - (buff.length - i);
if(number1Index >= 0)
num += number1.charAt(number1Index) - '0';
if(number2Index >= 0)
num += number2.charAt(number2Index) - '0';
if(num >= 10) {
carry = 1;
num -= 10;
} else
carry = 0;
buff[i] =(char)('0' + num);
}
String result = new String(buff);
if(carry > 0) {
result = '1' + result;
}
System.out.println(result);
grass_12 2007-07-12
  • 打赏
  • 举报
回复
晕,不允许用BIgInteger呀
justicesun 2007-07-12
  • 打赏
  • 举报
回复
晕...直接面向加法编程不就行了...按位加

class bit{ //每位的对象
int i,j;// 0<=i<10 0<=i<10
int flag;
}

觉得有点像刚做完的n位二进制加法器电路...晕
  • 打赏
  • 举报
回复
String number1 = "335426587768665654444444444444444444445434";
String number2 = "33439985555555544444444444444444444445535426587768665655434";
BigInteger num1 = new BigInteger(number1);
BigInteger num2 = new BigInteger(number2);
BigInteger num3 = num1.add(num2);
System.out.println(num3.toString());

楼主太强了,BigInteger 也是采用类似的方法。
weihthchk 2007-07-11
  • 打赏
  • 举报
回复
BigInteger……
grass_12 2007-07-11
  • 打赏
  • 举报
回复
有更好的办法show出来
Python编程基础教程本教程旨在帮助初学者了解Python编程的基础知识和高级应用。我们将介绍Python的各个方面,包括基础语法、数据类型、控制结构、函数、文件操作、面向对象编程、模块和包、异常处理、装饰器、生成器、迭代器以及协程。1. Python基础Python是一种解释型、交互式的编程语言。它具有简单易学的语法和丰富的库,使得开发过程既快速又高效。在开始学习Python之前,建议您先熟悉基本的计算机科学概念,例如变量、数据类型、运算符等。2. 数据类型Python具有多种数据类型,包括数字(整数和浮点数)、字符串、布尔值、列表、元组、集合和字典等。这些数据类型在Python中有着广泛的应用,从简单的数值计算到复杂的数据处理。3. 控制结构控制结构是编程中的基本组成部分,它们决定了程序如何执行。Python支持条件语句(if-elif-else)和循环语句(for和while),可以根据程序中的特定条件和情况来选择适当的操作。4. 函数函数是封装一段代码的便捷方式,它们可以在需要时被调用。在Python中,您可以定义函数,并使用参数来传递数据。函数可以返回值,以便在调用它们时使用。5. 文件操作文件操作是编程中常见的任务之一。Python提供了许多内置的函数和方法来进行文件操作,如读取、写入和删除文件等。此外,Python还支持对文件进行高级操作,如读写二进制文件、文件锁定等。6. 面向对象编程面向对象编程是一种流行的编程范式,它使用类和对象的概念来构建复杂的系统。Python支持面向对象编程,您可以使用类来定义对象,并使用继承和多态等特性来扩展和定制对象的行为。7. 模块和包模块和包是Python中组织代码的重要工具。模块是一个包含Python代码的文件,而包则是一个包含多个模块的目录。通过使用模块和包,您可以轻松地组织和管理大型项目中的代码。8. 异常处理异常处理是Python中处理错误的方式之一。当程序中出现错误时,Python会抛出一个异常。通过使用try-except语句块,您可以捕获并处理这些异常,以确保程序的稳定性。9. 装饰器装饰器是Python中的高级功能之一,它允许您在函数或方法之间添加额外的功能,而不改变其原始实现。装饰器是一种强大的工具,可用于实现各种功能,如日志记录、性能分析等。10. 生成器生成器是Python中的一种特殊类型的迭代器。通过使用生成器函数和方法,您可以在需要时生成数据,而不是一次性生成所有数据。这使得生成器在处理大量数据时非常有用,因为它们可以节省内存空间。11. 迭代器和协程迭代器和协程是Python中的两个重要概念。迭代器允许您遍历容器类型的数据结构(如列表和元组),而协程则是一种异步编程的方式,它允许您在程序中执行多个任务并发执行。这两个概念在处理大量数据和高性能应用程序方面非常有用。

62,617

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧