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);
}
}