如何将一个大数字存储在一个数组中,然后将数字相加?

How to store a big number in parts in an array and then add up the digits?

假设用户在下面输入了一个数字:

54353325421435

我希望下面的变量存储上面数字的一部分

例如

int part[3]
part[0]=54353
part[1]=32
part[2]=5421435

然后将数字相加并将其存储在变量中,如下所示:

例如

int sum[3]
sum[0]=5+4+3+5+3      //sum up part[0]
sum[1]=3+2            //sum up part[1]
sum[2]=5+4+2+1+4+3+5  //sum up part[2]

抱歉各位!我不知道,如何更好地解释这一点!我希望你明白我的问题。 感谢阅读

如果你想要号码的位数之和。正如你上面提到的

int number,digit,sum=0;
while(number!=0)
{
 digit=number%10;
 sum=s+digit;
 number=number/10;
}

此代码段将计算编号的数字总和。

if number=123;
it will calculate sum=3+2+1=6;

问题

您想将整数分成 3 个不同的部分。基本上,你有一个数字 54353325421435,你想将它分成:

part[0]=54353
part[1]=32
part[2]=5421435

然后把它们加起来。

解决方案

A for 循环效果最好。如果您不知道什么是 for 循环,基本上它是一种具有定义的起点和终点的迭代方式。例如,这是一个简单的迭代,它打印出“hello world” 2 次:

for(int i=0; i<2; i++)
   cout << "Hello World" << endl;

您可以了解有关 for 循环 here 的更多信息。在你的情况下,你想要做的是迭代这个。所以基本上,首先你将变量存储在一个整数中。 (我相信你能做到。)

 const unsigned long long NUM = 54353325421435; //Make it a constant to not change it

然后你得到了上面提到的一系列零件:

int part[3]

你现在可以做的是循环 NUM。那么让我告诉你如何做第一个:

int access_digits(const unsigned long long int n, int index)
{
    int digit_array[64] = {0};

    unsigned long long digits = 0, digit, number = n;
    while (number) {
        digit = number % 10;
        number /= 10;
        digit_array[digits] = digit;
        digits++;
    }

    return digit_array[digits - index - 1];
}

 std::string digits;
 for(int i=0; i<=4; i++)
 {
    digits.append(std::to_string(access_digits(NUM,i)));
 }
 int digit_int = std::stoi( digits );

上面可以看到,首先是有一个access_digits函数。您可以使用该函数按索引访问数字。 (功劳归功于 Slayther。)无论如何,在那之后,您可以看到我从 0 循环到 4 以获得 part[0] 的前 5 位数字。前5位带54353.

现在终于要将它们加起来了。好吧,这又很容易。只需遍历数字,然后让累加器将它们相加,如下所示:

  int accum=0;
  for(int i=0; i<4; i++)
  {
    accum += access_digits(digit_int,i);
  }
 

运动

现在编辑它以在练习部分包含下面的 part[1]part[2]

参考文献

Iterating through digits in integer in C

Teenage Territory chat

for loop

std::string

string::append

词汇表

For 循环:

Executes init-statement once, then executes statement and iteration_expression repeatedly until the value of condition becomes false. The test takes place before each iteration.

语法

正式语法:

attr(optional) for ( init-statement condition(optional) ; iteration_expression(optional) ) statement

informal syntax:

  attr(optional) for ( declaration-or-expression(optional) ; declaration-or-expression(optional) ; expression(optional) ) statement