/* 日期:2016年10月14日
* 作者:肖庆鸿(Eric)
* 程序版本1.0
* 程序功能:使用数组实现过大的非零整数的加法计算
* */
package com.Eric;
import java.util.Scanner;
public class ArrayCalPlus
{
private static Scanner sc;
public static void main(String[] args)
{
sc = new Scanner(System.in);
//输入加数
System.out.println("请输入加数:");
String a = input();
//输入被加数
System.out.println("请输入被加数:");
String b = input();
//计算
int length = a.length()>b.length()?a.length():b.length();
int[] res = new int[length];
res = Calplus(a, b);
//打印结果
dis(res);
sc.close();
}
//输入(方法)
private static String input()
{
String s = new String();
s = sc.next();
return s;
}
//计算(方法)
private static int[] Calplus(String a, String b)
{
char[] first_1 = a.toCharArray();
char[] second_1 = b.toCharArray();
char[] first = new char[first_1.length];
char[] second = new char[second_1.length];
int[] res = new int [(first_1.length>second.length?first_1.length:second_1.length)+1];
first = InvertedArrary(first_1);
second = InvertedArrary(second_1);
res = Plus(first, second); //两个数组相加
//int res = CharToInt(first[0])+CharToInt(second[0]);
//System.out.println(res);
return res; //返回int型数组
}
//加法计算
private static int[] Plus(char[] first, char[] second)
{
int len = (first.length>second.length?first.length:second.length); //找到最长的长度
int r = 0;
int[] res_1 = new int[first.length];
int[] res_2 = new int[second.length];
res_1 = CharToInt(first); //将字符串数组转换为int型数组
res_2 = CharToInt(second); //将字符串数组转换为int型数组
int[] res = new int[len+1]; //res[]用于承接结果数组
for (int k = 0; k < res.length; k++) //将用于承接结果的数组全元素赋值为0
{
res[k] = 0;
}
if(first.length> second.length) //若第一个数组更长时, 则for循环的终止条件由第一个长度控制
{
for (int i = 0, j = 0; i < first.length; i++, j++)
{
if(j >= second.length) //当短的数组全部读完,长的数组没读完,则短取0参与计算
{
r = res_1[i] + 0;
}
else r = res_1[i]+res_2[j];
if(r < 10) //按位计算加法后,若结果小于了10,则直接将该结果按数组下标赋值给结果数组
{
res[i] = r + res[i];
//System.out.println(r);
}
else //按位计算加法后,若结果大于了10,则将该结果的个位放在结果数组的的当前位,进位放在结果数组的下一位
{
res[i] = r%10 + res[i];
res[i+1] = 1;
}
}
}
else //若第二个数组更长或相等时, 则for循环的终止条件由第二个长度控制
{
for (int i = 0, j = 0; i < second.length; i++, j++)
{
if(j >= first.length) //当短的数组全部读完,长的数组没读完,则短取0参与计算
{
r = res_2[i] + 0;
}
else r = res_2[i]+res_1[j];
if(r < 10) //按位计算加法后,若结果小于了10,则直接将该结果按数组下标赋值给结果数组
{
res[i] = r + res[i];
//System.out.print(r);
}
else //按位计算加法后,若结果大于了10,则将该结果的各个位放在结果数组的的当前位,进位放在结果数组的下一位
{
res[i] = r%10 + res[i];
//System.out.println(r);
res[i+1] = 1;
}
}
}
return InvertedArrary_int(res);
}
//倒序整型数组
private static int[] InvertedArrary_int(int[] arrary)
{
int[] changed = new int[arrary.length];
for (int i = 0, j = arrary.length-1; i < arrary.length; i++,j--)
{
changed[i] = arrary[j];
}
return changed;
}
//倒序char数组元素
private static char[] InvertedArrary(char[] arrary)
{
char[] changed = new char[arrary.length];
for (int i = 0, j = arrary.length-1; i < arrary.length; i++,j--)
{
changed[i] = arrary[j];
}
return changed;
}
//打印结果数组
private static void dis(int[] res)
{
for(int i = 0; i < res.length; i++)
{
if(res[i] == 0 && res.length > 2)
{
continue;
}
else
System.out.print(res[i]);
}
}
//char的数字转换为int数字
private static int[] CharToInt(char[] a)
{
int[] b= new int[a.length];
for (int i = 0; i < a.length; i++)
{
b[i] = (int)a[i] - '0';
//System.out.print();
}
//System.out.println(b[0]);
return b;
}
}
使用数组实现过大的非零整数的加法计算(java)
最新推荐文章于 2024-05-16 14:41:25 发布