标签: sum-of-digits

阶乘的数字之和

链接到原始问题

这不是一个功课问题.我只是觉得有人可能知道这个问题的真正解决方案.

2004年我参加了编程竞赛,出现了这个问题:

给定n,找到n!的数字之和.n可以是0到10000.时间限制:1秒.我认为每个测试集最多有100个数字.

我的解决方案非常快,但速度不够快,所以我让它运行一段时间.它构建了一组预先计算的值,我可以在我的代码中使用它.这是一个黑客攻击,但它确实有效.

但有一个人用大约10行代码解决了这个问题,它会立即给出答案.我相信它是某种动态编程,或者来自数论的东西.当时我们16岁,所以它不应该是"火箭科学".

有谁知道他可以使用什么样的算法?

编辑:如果我没有明确提出问题,我很抱歉.正如mquander所说,应该有一个聪明的解决方案,没有bugnum,只有简单的Pascal代码,几个循环,O(n 2)或类似的东西.1秒不再是约束.

我在这里发现,如果n> 5,则9除以阶乘的数字之和.我们还可以找到数字末尾有多少个零.我们可以用吗?

好的,来自俄罗斯的编程竞赛的另一个问题.给定1 <= N <= 2 000 000 000,输出N!mod(N + 1).这有点关系吗?

algorithm dynamic-programming sum-of-digits

49
推荐指数
4
解决办法
3万
查看次数

C#中的数字总和

什么是计算数字总和的最快和最容易阅读的实现?

即给出数字:17463 = 1 + 7 + 4 + 6 + 3 = 21

c# algorithm sum-of-digits

36
推荐指数
5
解决办法
8万
查看次数

N == N的数字和的某些幂(运行太慢)

我正在尝试编写一个Python脚本,找到所有整数(N),其中N的数字之和的某个幂等于N.例如,N = 81符合条件,因为8 + 1 = 9,并且a某个9的幂(即2)= 81.

我选择的范围是任意的.我的脚本有效,但非常非常慢.理想情况下,我想在大约6000ms内找到前30个这样的整数.

我的第一个解答:

def powerOfSum1():
    listOfN = []
    arange = [a for a in range(11, 1000000)] #range of potential Ns
    prange = [a for a in range(2, 6)] # a range for the powers to calculate
    for num in arange:
        sumOfDigits = sum(map(int, str(num)))
        powersOfSum = [sumOfDigits**p for p in prange]
        if num in powersOfSum:
            listOfN.append(num)
    return listOfN
Run Code Online (Sandbox Code Playgroud)

在我的第二个解决方案中,我尝试为每个sumOfDigits存储所有权限,但这并没有提高性能.

def powerOfSum2():
    listOfN = []
    powers= {}
    for num in range(11, 1000000):
        sumOfDigits = …
Run Code Online (Sandbox Code Playgroud)

python algorithm performance sum-of-digits

9
推荐指数
1
解决办法
1292
查看次数

数组中词典的数量总和

我有一个包含NSDictionary列表的NSArray.喜欢:

NSArray *array = ...;
NSDictionary *item = [array objectAtIndex:0];
NSLog (@"quantity: %@", [item objectForKey: @"quantity"]);
Run Code Online (Sandbox Code Playgroud)

如何汇总阵列所有字典中包含的所有数量?

objective-c sum-of-digits nsarray

2
推荐指数
1
解决办法
1254
查看次数

Python程序找到等于数字n的连续数值的总和?

我想在字符串中找到与给定数字相加的连续数字.

例:

a="23410212"数字is=5- 输出23,41,410,0212,212.

此代码无效.我需要修理什么?

def find_ten_sstrsum():
    num1="2825302"
    n=0;
    total=0;
    alist=[];
    ten_str="";
    nxt=1;
    for n in range(len(num1)):
        for n1 in range(nxt,len(num1)):
            print(total)
            if(total==0):
                total=int(num1[n])+int(num1[n1])
                ten_str=num1[n]+num1[n1]
            else:
                total+=int(num1[n1])
                ten_str+=num1[n1]
            if(total==10):
                alist.append(ten_str)
                ten_str=""
                total=0
                nxt+=1
                break
            elif(total<10):
                nxt+=1
     return alist 
Run Code Online (Sandbox Code Playgroud)

python list sum-of-digits

2
推荐指数
1
解决办法
1039
查看次数

数组中的正整数求和为负数

我有这段代码:

int[] primes = generatePrimes(bound);

int sum = 0;
for (int i = 0; i < primes.GetLength(0); i++)
{
    if (sum < 0)
    {
        Console.WriteLine(sum);
    }
    sum += primes[i];
}
Run Code Online (Sandbox Code Playgroud)

我检查过以确保我的数组"primes"只包含正整数,如下所示:

if (primes[i] < 0)
{
    Console.WriteLine(primes[i]);
}
Run Code Online (Sandbox Code Playgroud)

但什么都不打印.但是,由于某种原因,总和有时会是负数,并且在我运行第一段代码时会打印出来.数组的长度是148933.我不太了解C#,但我不认为长度在这里应该重要吗?:S

如果有人知道为什么会这样,我会非常感谢任何帮助.

c# arrays sum-of-digits negative-number

1
推荐指数
1
解决办法
2064
查看次数

我的'cout'没有给出正确的价值 - 为什么?

简单的"数字和"代码.它编译但是在执行时,最后一个cout为num int而不是实际的用户输入数字给出"0".

如果您愿意,可以随意将其复制并粘贴到您自己的编译器中,看看我的意思.

如何输出正确的"num"值?

~~~

#include <iostream>

using namespace std;

int main()
{
  int num;
  int sum = 0;

  cout << "Please type any non-negative integer: ";
  cin >> num;

  while ( num > 0 ) {
    sum += num % 10;
    num /= 10;
  }

  cout << "The sum of the digits of " << num << " is " << sum << "\n";

  system("PAUSE");
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ sum-of-digits

0
推荐指数
1
解决办法
322
查看次数

添加数字(需要代码说明)

我在其他地方遇到过这段代码.它只是添加给定数字中的所有数字:

def sumDigits(n):
    sum = 0
    while n > 0:
        sum += n % 10
        n //= 10
    return sum
Run Code Online (Sandbox Code Playgroud)

问题是,我根本没有得到它背后的逻辑.特别是,我没有完全得到循环的作用:

   while n > 0:
        sum += n % 10  # Why n % 10?
        n //= 10       # Again, not sure why we divide the number by 10
Run Code Online (Sandbox Code Playgroud)

有人可以给我一个算法如何工作的例子吗?

谢谢!

python algorithm sum-of-digits

0
推荐指数
1
解决办法
75
查看次数

答案中的未知因素

我找不到我写的问题.我正在尝试Project Euler#16,我需要将所有数字加起来为2 ^ 1000.我的程序使用较小的数字,但随着数字大约18位左右,它会中断.有帮助吗?

public static double digit(double n){

    return n % 10;

}

public static double sumofDigits(double n){

    double sum = 0;

    while(n > 1){

        sum += digit(n);
        n = Math.floor(n/10);

    }

    return sum;

}

public static void main(String[] args) {

    double x = Math.pow(2,1000);

    double y = 22222222222222222222d;

    System.out.println(sumofDigits(x));

            System.out.println(sumofDigits(y));

}
Run Code Online (Sandbox Code Playgroud)

}

java sum-of-digits

-1
推荐指数
1
解决办法
76
查看次数

获取所有数字等于其给定总和的n位数字

我怎样才能得到所有n位数字的总和等于给定的总和?我需要最快的解决方案,因为n可以等于9,总和可以等于1000。

我已经在下面实现了解决方案,但是它太慢了...

List<int> l = new List<int>();
void findNDigitNumsUtil(int n, int sum, char[] ou, int index)
{
    if (index > n || sum < 0)
        return;
    if (index == n)
    {
        if (sum == 0)
        {
            ou[index] = '\0';
            string s = new string(ou);
            l.Add(Int32.Parse(s));
        }

        return;
    }

    for (int i = 0; i <= 9; i++)
    {
        ou[index] = (char)(i + '0');
        findNDigitNumsUtil(n, sum - i, ou,
                                index + 1);

    }
}

void findNDigitNums(int n, int sum)
{
    char[] …
Run Code Online (Sandbox Code Playgroud)

c# performance sum-of-digits

-1
推荐指数
1
解决办法
708
查看次数

c ++中长整数数组的总和

我知道这个问题很多次,但我在我的代码中遇到了不同的问题,我尝试计算2-15之间的长整数范围.

码:

long array[20];
long NUMBERS;

cout << "How many numbers ? : ";
cin >> NUMBERS;
long sum=0;
for (int i = 0; i < NUMBERS;i++){

    cout << "Input number " << (i+1) << " : ";
    cin >> array[i];    
}

cout << "Calculate Sum" << endl;
for (int i = 0; i < NUMBERS;i++){
    sum = sum + array[i];
}

cout << "Sum is : " << sum << endl;
Run Code Online (Sandbox Code Playgroud)

当我输入这三个数字时.

  1. 1234567
  2. 123456
  3. 12345

输出:

总和是:1370368

但实际答案是:3703627.

我尝试这些解决方案 …

c++ arrays sum-of-digits

-7
推荐指数
1
解决办法
1536
查看次数