用两个数字的特定数字和排列数字的算法

时间:2018-05-12 13:26:36

标签: java math sum int digit

我目前正在尝试创建一个算法,该算法应该能够将数字与特定数字总和对齐。例如,数字总和为1到500之间的数字。有人可以给我一些关于如何继续的建议吗?

我目前的进展:

 public class Digitsum{

static int Digitsum2(int number) {  //method to find out the digit sum from numbers between 1 and 500
    int sum = 0;
    if(number == 0){
        return sum;
    } else {
        sum += (number%10);
        Digitsum2(number/10);

    }
    return sum;
        }

static int Digitsum13(int x) { //method to line up the numbers with a digit sum of 13

    while (x <= 500) {
        x++;
        Digitsum2(x);
    }
    return x; 

}


public static void main(String[ ] args) {
   Digitsum13(13);
}

}

3 个答案:

答案 0 :(得分:0)

您想要找到特定范围内的所有数字(在这种情况下为1-500),其中各个数字总和到特定目标总和(在这种情况下为13)并打印它们的列表。

DigitSumClass:

public class Digitsum {

    static void digitSum(int target)
    {
    System.out.println("Target: " + target);
        for(int i = 1; i <= 500; i++)
        {
            int currsum = 0;
            int currnum = i;

            while(currnum > 0 )
            {
                currsum += currnum%10;
                currnum /= 10;
            }
            if( currsum == target)
            {
                //print each match
                System.out.println(i);
            }
        }

    }

    public static void main(String[] args) {
        System.out.println("Starting iteration from 1-500");
        digitSum(13);
    }

}

测试用例:

  

从1-500开始迭代目标:13 49 58 67 76 85 94 139 148 157   166 175 184 193 229 238 247 256 265 274 283 292 319 328 337 346 355   364 373 382 391 409 418 427 436 445 454 463 472 481 490

     

从1-500开始迭代目标:2 2 11 20 101 110 200

     

从1-500开始迭代目标:19 199 289 298 379 388 397 469   478 487 496

答案 1 :(得分:0)

有三个因素。

  • 循环从1到500
  • 计算数字和
  • 检查数字总和是否可接受值

如果你单独考虑这些,代码将是干净的。

public class Digitsum {
    static int digitsum(int n) {
        int ret = 0;
        while (n != 0) {
            ret += n % 10;
            n /= 10;
        }
        return ret;
    }
    public static void main(String[ ] args) {
        // digitsum2
        System.out.println("------- digitsum2-------");
        for (int i = 1; i <= 500; i++)
            if (digitsum(i) == 2)
                System.out.println(i);

        // digitsum13
        System.out.println("------- digitsum13-------");
        for (int i = 1; i <= 500; i++)
            if (digitsum(i) == 13)
                System.out.println(i);
    }
}

digitsum2的输出如下

------- digitsum2-------
2
11
20
101
110
200

答案 2 :(得分:0)

我发布了一个简单的程序并认为它会完成你的工作。因为理解你的程序有点困难。

class Example{
public static void main(String args[]){
    digitsum(13);
}

public static void digitsum(int num){
    int value;
    int copyofvalue;

    for(int i=1;i<500;i++){
        int sum=0;
        value=i;
        copyofvalue=value;

        while(value!=0){
            sum+=value%10;
            value/=10;
        }

        if(sum==num){
            System.out.println(copyofvalue);
        }
    }
}

如果您对上述计划有任何疑问,请通过评论告诉我。 如果它适合您的工作,请将其标记为已接受的答案。