如何将一个大数字存储在一个数组中,然后将数字相加?
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
词汇表
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
假设用户在下面输入了一个数字:
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
词汇表
For 循环:
Executes
init-statement
once, then executesstatement
anditeration_expression
repeatedly until the value ofcondition
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