字符串加减法程序

乔安

我写了一个程序,我想对字符串进行加减运算,其中所有字符串的长度都是四,看起来像“+002”、“+569”、“-022”、“-789”等。我已经尝试在不使用任何乘法、除法或余数的情况下执行此操作,但仅使用加法和减法作为运算,但我的问题是某些情况还不起作用,我不明白为什么或如何解决它因为用这么长的代码很难看清问题究竟出在哪里以及我应该改变什么。所以这里是相关的方法:

public static String add(String s1, String s2) {
        int number;
        int[] s = new int[4];
        String result = "";
        if (s1.contains("+") && s2.contains("+")) {
            result = "+";
            for (int i = 1; i < s1.length(); ++i) {
                if (!(s1.charAt(i) == 0 || s2.charAt(i) == 0)) {
                    if ((int) (s1.charAt(i)) + (int) (s2.charAt(i)) - 96 < 10) s[i] = (int) (s1.charAt(i)) + (int) (s2.charAt(i)) - 96;
                    else {
                        s[i] = (s1.charAt(i)) + (int) (s2.charAt(i)) - 106;
                    ++s[i - 1];
                    }
                }
                else if (s1.charAt(i) != 0 && s2.charAt(i) != 0) {
                    s[i] = (int) (s1.charAt(i)) + (int) (s2.charAt(i)) - 96;
                }
            }
        }
        else if (s1.contains("-") && s1.contains("-")) {
            result = "-";
            for (int i = 1; i < s1.length(); ++i) {
                if ((!(s1.charAt(i) == 0 || s2.charAt(i) == 0))) {
                    if ((int) (s1.charAt(i)) + (int) (s2.charAt(i)) - 96 < 10) s[i] = (int) (s1.charAt(i)) + (int) (s2.charAt(i)) - 96;
                    else {
                        s[i] = (s1.charAt(i)) + (int) (s2.charAt(i)) - 106;
                    ++s[i - 1];
                    }
                }
                else if (s1.charAt(i) != 0 && s2.charAt(i) != 0) {
                    s[i] = (int) (s1.charAt(i)) + (int) (s2.charAt(i)) - 96;
                }
            }
        }
        //if (s1.contains("+") && s1.contains("-") || s1.contains("-") && s1.contains("+"))
        else if (s1.contains("+") && s2.contains("-")) {
            char[] size1 = new char[s1.length()];
            char[] size2 = new char[s1.length()];
            for (int i = 1; i < s1.length(); ++i) {
                size1[i] = s1.charAt(i); 
                size2[i] = s2.charAt(i); 
            }
            if (size1[1] > size2[1]) result = "+";
            else if (size1[1] == size2[1]) {
                if (size1[2] > size2[2]) result = "+";
                else if (size1[2] == size2[2]) {
                    if (size1[3] > size2[3]) result = "+";
                    else if (size1[3] == size2[3]) return "+000";
                    else result = "-";
                }
                else result = "-";
            }
            else result = "-";
            for (int i = 1; i < s1.length(); ++i) {
                if (!(s1.charAt(i) == 0 || s2.charAt(i) == 0)) {
                    if (s1.charAt(1) < s2.charAt(1)) {
                        if (s1.charAt(2) <= s2.charAt(2)) {
                            if (s1.charAt(3) > s2.charAt(3)) {
                                s[2] = 10 - (s2.charAt(2) - s1.charAt(2));
                                s[3] = 10 - (s1.charAt(3) - s2.charAt(3));
                                --s[2];
                                s[1] = (s2.charAt(1) - s1.charAt(1));
                            }
                            else {
                                s[2] = (s2.charAt(2) - s1.charAt(2));
                                s[3] = (s2.charAt(3) - s1.charAt(3));
                                s[1] = s2.charAt(1) - s1.charAt(1);
                            }
                        }
                        else {
                            s[2] = 10 - (s1.charAt(2) - s2.charAt(2));
                            if (s1.charAt(3) < s2.charAt(3)) s[3] = (s2.charAt(3) - s1.charAt(3));
                            else {
                                s[3] = 10 - (s1.charAt(3) - s2.charAt(3));
                                --s[2];
                            }
                        }
                    }
                    else if (s1.charAt(i) - s2.charAt(i) < 0 && i == 1) s[i] = s2.charAt(i) - s1.charAt(i);
                    else if (s1.charAt(i) - s2.charAt(i) < 0 && i > 1) {
                        s[i] = s2.charAt(i) - s1.charAt(i);
                    }
                    else s[i] = s1.charAt(i) - s2.charAt(i);
                }
            }
        }
        else {
            char[] size1 = new char[s1.length()];
            char[] size2 = new char[s1.length()];
            for (int i = 1; i < s1.length(); ++i) {
                size1[i] = s1.charAt(i); 
                size2[i] = s2.charAt(i); 
            }
            if (size1[1] < size2[1]) result = "+";
            else if (size1[1] == size2[1]) {
                if (size1[2] < size2[2]) result = "+";
                else if (size1[2] == size2[2]) {
                    if (size1[3] < size2[3]) result = "+";
                    else if (size1[3] == size2[3]) return "+000";
                    else result = "-";
                }
                else result = "-";
            }
            else result = "-";
            for (int i = 1; i < s1.length(); ++i) {
                if (!(s1.charAt(i) == 0 || s2.charAt(i) == 0)) {
                    if (s1.charAt(1) > s2.charAt(1)) {
                        if (s1.charAt(2) >= s2.charAt(2)) {
                            if (s1.charAt(3) < s2.charAt(3)) {
                                s[2] = 10 - (s1.charAt(2) - s2.charAt(2));
                                s[3] = 10 - (s2.charAt(3) - s1.charAt(3));
                                --s[2];
                            }
                            else {
                                s[2] = (s1.charAt(2) - s2.charAt(2));
                                s[3] = (s1.charAt(3) - s2.charAt(3));
                                s[1] = s1.charAt(1) - s2.charAt(1);
                            }
                        }
                    }
                    else if (s1.charAt(i) - s2.charAt(i) > 0 && i == 1) s[i] = s1.charAt(i) - s2.charAt(i);
                    else if (s1.charAt(i) - s2.charAt(i) > 0 && i > 1) {
                        s[i] = s1.charAt(i) - s2.charAt(i);
                    }
                    else s[i] = s2.charAt(i) - s1.charAt(i);
                }
            }
        }
        for (int i = 1; i < s.length; ++i) result += s[i];
        return result;
    }
仙王座

由于您可以使用 charAt(),您可以自行转换字符串:

// String s1 = "+123";
int d1 = (s1.charAt(1) - '0') * 100;
int d2 = (s1.charAt(2) - '0') * 10;
int d3 = (s1.charAt(3) - '0');
int num = d1 + d2 + d3;

然后你可以用这个数字来计算。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java时间的加减法

来自分类Dev

Verilog签名的加减法

来自分类Dev

产品字典加减法

来自分类Dev

张量流的外部加减法

来自分类Dev

大会问题中的加减法

来自分类Dev

简单的加减法语法错误

来自分类Dev

X和Y坐标元组的简单加减法

来自分类Dev

Java中的日期间隔加减法

来自分类Dev

如何在SAS中计算加减法

来自分类Dev

如何用猫鼬长加减法?

来自分类Dev

用加减法设置和清除进位标志

来自分类Dev

变量加减法/随机化问题

来自分类Dev

Matlab:字符串向量-字符减法

来自分类Dev

如何使用VHDL进行带溢出检测的16位加减法运算器?

来自分类Dev

Python:十进制加减法没有给出确切的结果

来自分类Dev

MySQL如何在查询结果中添加“总计”行(加减法)

来自分类Dev

字符串的C#减法

来自分类Dev

C#中的双精度比较精度损失,加减法双精度数时会发生精度损失

来自分类Dev

如何在Ruby字符串中内插减法

来自分类Dev

C 字符串程序

来自分类Dev

PHP正则表达式字符串和减法部分

来自分类Dev

程序冻结生成随机字符串

来自分类Dev

子手程序字符串问题

来自分类Dev

编写程序压缩字符串

来自分类Dev

C ++字符串程序中的错误

来自分类Dev

程序如何确定字符串的结尾?

来自分类Dev

Java程序中的字符串数组

来自分类Dev

程序输出中的管道字符串

来自分类Dev

子手程序字符串问题