`
mushme
  • 浏览: 790061 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

很长的字符串整数求和

阅读更多
有次面试,被人问到这个问题,简单的写了个原理,代码一时没写出来。
得空把这个给完成了,查了下,BigInteger有现成的,又一个轮子。
package info.frady;

public class BigNumber {
	public static int width=1000;
	/**
	 * 两个字符串的大数相加,最大可以到1000位
	 * @param a1
	 * @param a2
	 * @return
	 */
	public static String add(String a1,String a2){
		int num1[],num2[],num3[];
		num1=num2=num3=new int[width];
		//将字符串数字赋值给数组
		num1=toIntArray(a1);
		if(num1[0]==-1){
			return "输入的第一个参数不是数字,请检查";
		}
		num2=toIntArray(a2);
		if(num2[0]==-1){
			return "输入的第二个参数不是数字,请检查";
		}
		
		for(int i=0;i<width-1;i++){
			int temp=0;
			temp=num1[i]+num2[i]+num3[i];
			num1[i]=temp % 10;//num1存结果的余数
			num3[i+1]=(temp/10)%10;//num3存结果的进位
		}
		while(!isZero(num3)){
			for(int i=0;i<width-1;i++){
				int temp=0;
				temp=num1[i]+num3[i];
				num1[i]=temp % 10;//num1存结果的余数
				num3[i+1]=(temp/10)%10;//num3存结果的进位
			}
		}
		
		StringBuffer sb=new StringBuffer();
		boolean flag=false;
		for(int i=num1.length-1;i>=0;i--){
			if(num1[i]!=0){
				flag=true;
			}
			if(flag){
				sb.append(num1[i]);
			}
		}
		return sb.toString();
	}
	
	/**
	 * 字符串转化成数字,如果包含不是数字的字符,就将第一位置为-1,调用程序通过第一位的数值来判断是否出错
	 * @param str
	 * @return
	 */
	public static int[] toIntArray(String a1){
		int num1[]=new int[width];
		for(int i=1;i<=a1.length();i++){
			int temp=0;
			temp=Character.getNumericValue(a1.charAt(a1.length()-i));
			if(temp>=0&&temp<=9){
				
				num1[i-1]=temp;
			}
			else{
				num1[0]=-1;
				return num1;
			}
		}
		return num1;
	}
	
	public static boolean isZero(int num[]){
		boolean flag=true;
		for(int i=0;i<num.length;i++){
			if(num[i]>0){
				return false;
			}
		}
		return flag;
	}
	
	public static void main(String[] args) {
		System.out.println(add("1m1","22"));
		System.out.println(add("19","22"));
		System.out.println(add("33","88"));
		System.out.println(add("99","99"));
		System.out.println(add("0","99"));
		System.out.println(add("100","99"));
		System.out.println(add("102","99"));
		
	}

}

分享到:
评论

相关推荐

    易语言转换IP到长整数

    总之,易语言转换IP到长整数是网络编程中的一种常见操作,它涉及到字符串处理、数字转换和数学运算等多个方面。理解和掌握这个过程,不仅可以提升你的易语言编程技能,还有助于你在网络编程领域更上一层楼。

    c语言基础练习[参考].pdf

    23. 字符串比较长度,同样需要逐一比较,但这里是返回较长的字符串。 24. 求解特定级数的X值,需要迭代直到满足精度条件,每次迭代都累加一个分数。 25. 求满足精度的数字,需要通过迭代逼近,每次计算差值并与...

    汇编简单程序--十进制数字求和并以十进制显示

    - `goDB'Pleaseinputfivescore:$'`:定义一个字符串`go`,用于提示用户输入五个数字。 - `goodb'thesumis:$'`:定义一个字符串`goo`,用于告知用户将要显示总和。 #### 2. 堆栈段(Stack Segment) 堆栈段用于存放...

    程序设计题1-40.pdf

    2. 字符串处理:诸如 `intfun(char*s)` 这类函数用于计算字符串的长度,即统计直到字符串结束符 `\0` 的字符数量。还有对字符串进行处理的函数,例如删除字符串中的空格。 3. 指针和数组:文档中涉及到了指针的使用...

    2012年3月全国计算机等级考试二级C语言最新上机考试题库及答案.pdf

    - 对于长整形变量的字符串表示,可以通过`itoa()`或`stringstream`来转换。 3. 数组和指针: - 在C语言中,数组的元素可以被看作是连续存储的,通过指针可以访问和修改数组元素。 - 数组下标从0开始,因此访问...

    Python期末题库(1)-带答案(2).docx

    - 回文数是指正读反读都能读通的数字,将输入的数字转换为字符串,然后使用切片操作`[::-1]`获取反转的字符串,比较原字符串和反转字符串是否相等。 6. **最大公约数(GCD)**: - 最大公约数是两个或多个整数共有...

    C语言程序设计上机考试题目汇编.pdf

    3. **字符串复制和重复**:题目要求创建一个新的字符串`t`,其中每个字符在原字符串`s`中都重复一次。可以使用两个嵌套的`for`循环,外层循环遍历`s`中的字符,内层循环将字符添加到`t`中,每次添加两次。 4. **...

    200个经典C程序源码小游戏

    031 判断字符串是否回文 032 通讯录的输入输出 033 扑克牌的结构表示 034 用“结构”统计学生成绩 035 报数游戏 036 模拟社会关系 037 统计文件的字符数 038 同时显示两个文件的内容 039 ...

    蓝桥杯最新入门训练试题库.pdf

    6. 字符串对比问题:题目要求编写程序对比两个字符串,并根据不同的情况进行输出。字符串的长度不等、完全一致(区分大小写)、或者长度相等但区分大小写。这个问题主要考察字符串处理能力,以及对编程语言提供的...

    期末.zip

    2. **字符串操作**:`大小写,删除某个字符.c`可能包含了对字符串的处理,比如修改字符串中的字符(大小写转换)或删除特定字符。在C语言中,字符串是以字符数组的形式存在的,因此可能涉及到字符串长度的计算、字符...

    用栈实现了大数相加(C++)

    6. **输出结果**:将结果大数转换回正常的字符串形式,输出或保存到文件。 这个过程充分利用了栈的特性,简化了大数相加的逻辑。通过栈的压入和弹出操作,我们可以方便地从低位到高位逐位处理加法,而无需担心越界...

    南开二级C机试编程题

    通过`for`循环遍历源字符串,跳过指定位置的字符,将其他字符复制到目标数组,最终在目标数组末尾添加字符串结束符`\0`。这加强了对字符串操作和数组复制技巧的理解。 ### 知识点7:数组最大值查找 第七题聚焦于...

    2010年3月计算机三级上机题目与答案.pdf

    4. 整数转换函数:文档中包含了将整数n转换为字符串的ltoa函数。然后通过计算字符串长度的中间值来判断数字是否为回文数。算法通过比较字符串两端向中心逐步比较,如果所有字符都相等,则认为是回文数,否则不是。 ...

    SumOfString:此存储库将包含 SumOfString 程序的源代码

    在"SumOfString"这个项目中,我们主要关注的是一个用Java语言编写的程序,其目标是实现对字符串数组中的字符进行求和的功能。这个程序可能涉及到字符串处理、字符编码、算法以及数据结构等核心编程概念。接下来,...

    C语言 数组部分PPT

    2. **字符数组与字符串**:字符数组是用来存储字符的,而字符串在C语言中实际上是一个以空字符`\0`结尾的字符数组。例如,`char string[100]`可以用来存储最多99个字符的字符串。字符串处理是C语言编程中的常见任务...

    c语言常用编程学习

    题目要求实现一个函数,能够将一个字符串转换为整数。例如,将字符串 "-1234" 转换成整数值 -1234。 **实现逻辑:** - 遍历字符串中的每一个字符。 - 将字符转换为其对应的数值。 - 处理负号的情况。 - 累加每个...

    浙工大acm解题报告,其中比较容易的题目

    输入包括一个字符串`s`表示的大数和一个整数`m`,要求输出`s`乘以`m`的结果。 **代码解析**: 1. **读取输入**:首先读入字符串`s`和整数`m`。 2. **计算乘积**:从右向左遍历字符串`s`中的每一位,并与整数`m`相乘...

    SQL Server一些SQL应用的基本语法和相关的操作应用

    - **字符索引位置**:使用`CHARINDEX(子字符串, 字符串)`来查找子字符串在字符串中的起始位置。 ### 6. 获取系统日期时间 - `GETDATE()`函数返回当前系统日期时间。 - 可以通过`YEAR(date)`, `MONTH(date)`, `DAY...

    java 经典习题.doc

    这些Java经典习题涵盖了多个基础编程概念,包括数学问题解决、算法设计、逻辑判断、循环结构、条件运算符、数组处理、字符串操作、输入输出、递归、数学计算等。以下是这些习题所涉及的知识点: 1. **斐波那契数列*...

    猜数字dos界面代码

    - `m_Show`:可能用于显示游戏状态或消息的字符串变量。 - `m_num1`、`m_num2`、`m_num3`、`m_num4`:用户输入的数字,每个数字对应一个文本框。 - 方法: - `InitGame()`:初始化游戏的方法,可能是设置随机...

Global site tag (gtag.js) - Google Analytics