![](/img/trans.png)
[英]How to display very large strings i.e exceeding 1 million characters in a JTextArea?
[英]How would i add very large Numbers represented as Strings i.e 50 digit numbers
在這個程序中,我已經使用BigInterger創建了一個版本,但我仍然堅持使用僅使用字符串的版本。 我將如何添加兩個非常大的字符串,如50個數字,只使用字符串。 謝謝
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());
}
自己編寫add
方法並不困難。
這個add
做了1年級,2年級,3年級的學生。
實際上,成年人為長期做同樣的事。
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());
}
}
這是代碼執行此操作:
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());
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.