Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 计算数字根,有更好的方法吗?_Java_Math - Fatal编程技术网

Java 计算数字根,有更好的方法吗?

Java 计算数字根,有更好的方法吗?,java,math,Java,Math,这就是我计算整数的数字根的方法 我将把输入作为字符串。通过这种方式,您可以简单地循环字符串,并使用Integer.parseInt()获取每个数字并添加它们。您可以再次将该数字转换为字符串,并循环代码以获得数字根 public void run() { println("This program calculates the digital root of an interger."); String num = readLine("Enter the number: ");

这就是我计算整数的数字根的方法




我将把输入作为字符串。通过这种方式,您可以简单地循环字符串,并使用Integer.parseInt()获取每个数字并添加它们。您可以再次将该数字转换为字符串,并循环代码以获得数字根

public void run()
{
    println("This program calculates the digital root of an interger.");

    String num = readLine("Enter the number: ");
    int sum = 10;
    while (num > 9) {
      for (int x = 0; x < num.length(); x++) {
         sum = Integer.parseInt(num.charAt(x));
      }
      num = Integer.toString(sum);
   }
   println("Digital Root is: " + sum);
}
public void run()
{
println(“该程序计算整数的数字根。”);
String num=readLine(“输入数字:”);
整数和=10;
while(num>9){
对于(int x=0;x
就我个人而言,我不喜欢你的循环,它本质上是两个循环(首先检查原始数字,然后检查总和的数字)混成一个。稍微递归一下怎么样:

private int sumDigits(int in){
   if (i>10)
      return in%10 + sumDigits(in/10);
    return in;
}

private int digitalRoot(int in){
    assert (in > 0) ;
    while (in > 9)  in=sumDigits(in);
    return in;
}

我想我在课堂上的观点是相同的,没有递归或任何中等程度的高级思想(我是一个超级初学者)。我曾经


Wolfram Alpha真是太棒了。它给了我以下的解决方案:

int getDigitalRoot(int n, int base){
      return (1+(n-1)%base); }

int getDigitalRoot(int n){
      return (1+(n-1)%9); }

这是一个O(1)解决方案,不需要循环或递归。

这是我发现的适用于所有用例的最短解决方案

public int digRoot(int num) {
        num = 1015; {
        return (1+(num-1)%9);
        }
}

参考:

对于家庭作业,您必须证明/解释这个神奇的公式。这个公式位于页面底部:它非常棒。在编写真正的代码时,您应该始终在适用的地方使用完善的算法。不需要重新发明轮子。然而,作为家庭作业,他们可能是想教你轮子是如何工作的,所以你应该试着自己找出算法。通过这种方式,您将学到更多,并且能够更加欣赏拉曼斯公式中所包含的智慧。@Ibn我没有想出这个算法:-)请参见上文,了解我的个人解决方案。@Ibn Oops!我没看到。在这种情况下,拉曼斯公式并不是一个真正的算法,就像皮塔戈里定理不是一个真正的算法一样。拉曼斯的公式很可能是通过纯数学推导出来的。你能再解释一下你的答案吗?这不适用于9的倍数,例如18%9=0
#include <stdio.h>

int main(void)
{
   int number;
   scanf("%d", &number);

   printf("The digital root of %d is %d.", number, (1 + (number - 1) % 9));
}
#include <stdio.h>
#include <ctype.h>

int main(void)
{
    int c;
    int number = 0;
    while ((c = getchar()) != EOF)
    {
        if (isdigit(c))
            number += (c - '0');
    }
    if (number <= 9)
    {
        printf("The digital root is %d\n", number);
    }
    else
    {
        printf("%d", number);
    }

}
$ echo 829382938 | ./digitalroot | ./digitalroot | ./digitalroot | ./digitalroot
public void run() {
    println("This program finds the digital root of an integer.");
    int n = readInt("Enter a positive integer: ");
    int dsum = 0;
        while (n>0) {
            dsum += n % 10;
            n /= 10;
            if ((n==0) && (dsum>9)) {
                n = dsum;
                dsum = 0;
            }   
        }
    println("The digital root of the integer is " + dsum);
}
public static void main(String[] args)


{
int n;
Scanner scan=new Scanner(System.in);
System.out.println("Enter the no. of which you want to find the digital root");
n=scan.nextInt();
System.out.println(n%9);
}
int getDigitalRoot(int n, int base){
      return (1+(n-1)%base); }

int getDigitalRoot(int n){
      return (1+(n-1)%9); }
public int digRoot(int num) {
        num = 1015; {
        return (1+(num-1)%9);
        }
}