Here in this program i have allready created a version using BigInterger but I'm stuck on making this version that only uses Strings. How would i go about adding two strings together which are very large, like 50 digit which uses just Strings. Thanks
public class BigStringNumber {
int []f;
String J;
public BigStringNumber(String H) {
this.J=H;
for(int i=0; i<H.length(); i++){
f=new int[i];
}
// TODO Auto-generated constructor stub
}
public String toString(){
return ""+J;
}
public BigStringNumber add(BigStringNumber d){
return new BigStringNumber();
}
public static void main(String[]args){
BigStringNumber A=new BigStringNumber("46376937677490009712648124896970078050417018260538");
BigStringNumber a=new BigStringNumber("46376937677490009712648124896970078050417018260538");
System.out.print(a.toString());
}
It is not so hard to write the add
method on your own.
This add
does what students in 1st, 2nd, 3rd grades do.
Actually adults do the same for long numbers.
public class BigStringNumber {
private int[] digit;
// private String str;
public BigStringNumber(String str) {
// this.str = str;
this.digit = new int[str.length()];
for (int i = 0; i < str.length(); i++) {
digit[i] = str.charAt(i) - '0';
}
}
public String toString() {
StringBuilder sb = new StringBuilder();
for (int i=0; i<digit.length; i++){
sb.append((char) ('0' + digit[i]));
}
return sb.toString();
}
public BigStringNumber add(BigStringNumber d) {
StringBuilder sb = new StringBuilder();
int i1 = this.digit.length - 1;
int i2 = d.digit.length - 1;
int dgt = 0;
int carry = 0;
while (i1 >= 0 && i2 >= 0) {
dgt = this.digit[i1] + d.digit[i2] + carry;
carry = dgt / 10;
dgt = dgt % 10;
i1--;
i2--;
sb.append((char) ('0' + dgt));
}
while (i1 >= 0) {
dgt = this.digit[i1] + carry;
carry = dgt / 10;
dgt = dgt % 10;
i1--;
sb.append((char) ('0' + dgt));
}
while (i2 >= 0) {
dgt = d.digit[i2] + carry;
carry = dgt / 10;
dgt = dgt % 10;
i2--;
sb.append((char) ('0' + dgt));
}
sb = sb.reverse();
return new BigStringNumber(sb.toString());
}
public static void main(String[] args) {
BigStringNumber a = new BigStringNumber("2020202029");
BigStringNumber b = new BigStringNumber("4040404046");
System.out.println(a.add(b).toString());
}
}
Here goes the Code to do this:
public class BigStringNumber {
private int[] digit;
// private String str;
public BigStringNumber(String str) {
// this.str = str;
this.digit = new int[str.length()];
for (int i = 0; i < str.length(); i++) {
digit[i] = str.charAt(i) - '0';
}
}
public String toString() {
StringBuilder sb = new StringBuilder();
for (int i=0; i<digit.length; i++){
sb.append((char) ('0' + digit[i]));
}
return sb.toString();
}
public BigStringNumber add(BigStringNumber d) {
StringBuilder sb = new StringBuilder();
int i1 = this.digit.length - 1;//contains first number
int i2 = d.digit.length - 1;//second number
int carry = 0;//variable
int dgt = 0;//variable
while (i1 >= 0 && i2 >= 0) {
carry = this.digit[i1] + d.digit[i2] + dgt;//adds numbers together
dgt = carry / 10;
carry = carry % 10;
i1--;
i2--;
sb.append((char) ('0' + carry));
}
while (i1 >= 0) {
carry = this.digit[i1] + dgt;
dgt = carry / 10;
carry = carry % 10;
i1--;
sb.append((char) ('0' + carry));
}
while (i2 >= 0) {
carry = d.digit[i2] + dgt;
dgt = carry / 10;
carry = carry % 10;
i2--;
sb.append((char) ('0' + carry));
}
sb = sb.reverse();
return new BigStringNumber(sb.toString());
}
public static void main(String[] args) {
BigStringNumber a = new BigStringNumber("2020202029");
BigStringNumber b = new BigStringNumber("4040404046");
System.out.println(a.add(b).toString());
}
}
/**
* Created by SidMore on 5/6/2016.
*/
public class AddLargeString {
private String s1;
private String s2;
public AddLargeString(String s1, String s2){
this.s1 = new StringBuilder(s1).reverse().toString();
this.s2 = new StringBuilder(s2).reverse().toString();
}
public String add() {
int[] d = new int[s1.length() + 1];
if (s1.length() > s2.length()) {
for (int i = 0; i < s1.length(); i++) {
d[i] = s1.charAt(i) - '0';
}
for (int j = 0; j < s2.length(); j++) {
d[j] = d[j] + s2.charAt(j) - '0';
}
} else {
for (int i = 0; i < s2.length(); i++) {
d[i] = s1.charAt(i) - '0';
}
for (int j = 0; j < s1.length(); j++) {
d[j] = d[j] + s1.charAt(j) - '0';
}
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < d.length; i++) {
int mod = d[i] % 10;
int carry = d[i] / 10;
if (i + 1 < d.length)
d[i + 1] += carry;
sb.insert(0, mod);
}
//remove front 0's
while (sb.charAt(0) == '0' && sb.length() > 1) {
sb.deleteCharAt(0);
}
return sb.toString();
}
public static void main(String[] args){
AddLargeString aLS = new AddLargeString("3560","9");
System.out.println("Addition: " + aLS.add());
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.