【问题标题】:derived polynom with String methods带有字符串方法的派生多项式
【发布时间】:2015-02-13 21:00:10
【问题描述】:

有来自用户的输入字符串。这是一个多项式。我如何在不使用数组的情况下导出这个 polinom

ı输入= 3x^4+5x^45-2+77x^100

输出必须是12x^3 + 225x^44 + 7700x^99

我怎么知道多项式中有多少个 x 语句?

我的代码是:

String katsayi = polinom.substring(0, polinom.indexOf("x"));
String us = polinom.substring(a + 1);
int katSayi = Integer.parseInt(katsayi);
int uS = Integer.parseInt(us);
katSayi = katSayi * uS;
uS = uS - 1;
katsayi = Integer.toString(katSayi);
us = Integer.toString(uS);
yeniPolinom = katsayi + "x^" + us;
System.out.println(yeniPolinom);

【问题讨论】:

  • 你想得到衍生物吗?
  • 是的,但我会从用户那里获取输入字符串。 @brso05
  • 给我一点,我会尽力为你整理一个答案......
  • 用户将写入输入。所以输入可以有很多 x 语句。我们不知道。我试图得到这个输入的派生。如果是 3x^2+2x^33,则输出为 6x+66x @brso05
  • 将所有部分都写成ax^n的形式,或者输入是否可以写成x^2而不是1x^2,或者没有x部分像1 1x^0?

标签: java string


【解决方案1】:
 public static void main(String[] args) throws IOException {
        String polynomial = "3x^4+5x^45-2+77x^100";
        int lastNumber = 0;
        int temp = 0;
        String output = "";
        for(int i = 0; i < polynomial.length() - 1; i++)
        {
            if(polynomial.charAt(i) == 'x')
            {
                int counter = i + 1;
                int a = 0;
                int b = 0;
                String tempString1 = "";
                String tempString2 = "";
                String number = "";
                while((polynomial.charAt(counter) != '0') && (polynomial.charAt(counter) != '1') && (polynomial.charAt(counter) != '2') && (polynomial.charAt(counter) != '3') && (polynomial.charAt(counter) != '4') && (polynomial.charAt(counter) != '5') && (polynomial.charAt(counter) != '6') && (polynomial.charAt(counter) != '7') && (polynomial.charAt(counter) != '8') && (polynomial.charAt(counter) != '9'))
                {
                    tempString1 += polynomial.charAt(counter);
                    counter++;
                }
                while((counter < polynomial.length()) && ((polynomial.charAt(counter) == '0') || (polynomial.charAt(counter) == '1') || (polynomial.charAt(counter) == '2') || (polynomial.charAt(counter) == '3') || (polynomial.charAt(counter) == '4') || (polynomial.charAt(counter) == '5') || (polynomial.charAt(counter) == '6') || (polynomial.charAt(counter) == '7') || (polynomial.charAt(counter) == '8') || (polynomial.charAt(counter) == '9')))
                {
                    number += polynomial.charAt(counter);
                    counter++;
                }
                a = Integer.parseInt(number);
                temp = counter - 1;
                counter = i - 1;
                number = "";
                while((polynomial.charAt(counter) != '0') && (polynomial.charAt(counter) != '1') && (polynomial.charAt(counter) != '2') && (polynomial.charAt(counter) != '3') && (polynomial.charAt(counter) != '4') && (polynomial.charAt(counter) != '5') && (polynomial.charAt(counter) != '6') && (polynomial.charAt(counter) != '7') && (polynomial.charAt(counter) != '8') && (polynomial.charAt(counter) != '9'))
                {
                    tempString2 = polynomial.charAt(counter) + tempString2;
                    counter--;
                }
                while((counter >= 0) && ((polynomial.charAt(counter) == '0') || (polynomial.charAt(counter) == '1') || (polynomial.charAt(counter) == '2') || (polynomial.charAt(counter) == '3') || (polynomial.charAt(counter) == '4') || (polynomial.charAt(counter) == '5') || (polynomial.charAt(counter) == '6') || (polynomial.charAt(counter) == '7') || (polynomial.charAt(counter) == '8') || (polynomial.charAt(counter) == '9')))
                {
                    number = polynomial.charAt(counter) + number;
                    counter--;
                }
                b = Integer.parseInt(number);
                for(int j = lastNumber; j <= counter; j++)
                {
                    output += polynomial.charAt(j);
                }
                output += "" + (a * b) + "x^" + (a - 1);
                lastNumber = temp + 1;
                i = temp;
            }
        }
        System.out.println(output);
    }

输出:

12x^3+225x^44-2+7700x^99

【讨论】:

    【解决方案2】:

    解析一个看起来像多项式的字符串可能非常乏味,因为有数百种方法可以写下同一个多项式。但是,如果我们坚持ax^n 的格式,你可以看看这个答案来提取多项式的系数:https://stackoverflow.com/a/13415745/1743880

    考虑为此创建一个带有derivative 方法的Polynom 类。

    【讨论】:

      【解决方案3】:

      如何使用regex 查找格式为[number1]x^[number2] 的部分,然后用[num1]*[num2]x^[num2 - 1] 替换这些部分?这是根据找到的值动态创建替换零件的示例。

      String input = "3x^4+5x^45-2+77x^100";
      
      Pattern p = Pattern.compile("(\\d+)x\\^(\\d+)");
      //                            ^^^^      ^^^^
      //                           group1    group2
      Matcher m = p.matcher(input);
      StringBuffer sb = new StringBuffer();
      while (m.find()) {
          int a = Integer.parseInt(m.group(1));
          int n = Integer.parseInt(m.group(2));
          if (n != 0)
              m.appendReplacement(sb, (a * n) + "x^" + (n - 1));
          else
              m.appendReplacement(sb, "0");
      }
      m.appendTail(sb);
      String output = sb.toString();
      System.out.println(output);
      

      输出:12x^3+225x^44-2+7700x^99

      请注意,此解决方案非常有限。它假定所有部分都将以ax^n 形式编写,因此对于x^2 而不是1x^2-1 而不是-1x^0 之类的数据将无法正常工作。我还假设n 不会是负数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-09
        相关资源
        最近更新 更多