C ++分离INT并将它分成两半

时间:2016-07-08 17:03:43

标签: c++

我想要一些逻辑甚至代码向我展示。问题就像标题所说的那样。例如: 我输入n = 1234; 我将n分别为1 2和3 4,总和1和2,然后将两个变量中的3和4相加。 然后我比较变量。我知道如何分离int,我知道如何比较它们,但我没有总和的逻辑。我怎么能总结这两半?或者甚至我如何将这两半分开? 修改

#include <iostream>
#include <stack>
#include <string>

using namespace std;

int getInput(string prompt)
{
    int val;
    cout << prompt;
    cin >> val;
    return val < 0 ? -val : val;
}

int main(int argc, char** argv)
{
    int num = getInput("Enter a number: ");
    cout << "Original Number: " << num << endl;

    stack<int> digits;
    int sum = 0;
    while(num > 0)
    {
        digits.push(num % 10);
        sum += digits.top();
        num = num / 10;
    }

    while(digits.size() > 0)
    {
        cout << digits.top() << " ";
        digits.pop();
    }

    cout << endl << "Sum of digits is " << sum << endl;

    return 0;
}

好的。我进入了这一点。我可以总结一下。如何将整数分成两半?

3 个答案:

答案 0 :(得分:1)

我们假设我们已经取整数1234,并分为两部分:12和34:

int part_1 = 12;
int part_2 = 34;

sum add ,我们可以使用加法运算符:

int sum = part_1 + part_2;
cout << "Sum is: " << sum << endl;

编辑1:使用数字
在许多情况下,当要求需要操纵数字时,将数字保持为文本或字符串通常更容易 我们有一个字符串:

  const std::string text_number = "1234";

我们可以获得字符串的长度:

const unsigned int length = text_number.length();  

要将字符串分成两半,我们将长度分成两半,然后将一半字符复制到一个字符串,将一半复制到另一个字符串。

const unsigned int half_length = length / 2;
std::string part1;
std::string part2;
unsigned int index;
for (index = 0; index < half_length; ++index)
{
  part1 += text_number[index];
}
for (; index < length; ++index)
{
  part2 += text_number[index];
}

现在,诀窍是将文本字符串转换为内部数字表示。一种方法是使用istringstream;

std::istringstream stream1(part1);
std::istringstream stream2(part2);
int first_half;
int second_half;
stream1 >> first_half;
stream2 >> second_half;

最后,他们可以总结:

int sum = first_half + second_half;

答案 1 :(得分:0)

许多错误处理缺失,包括。检查数字的数字是否均匀,但你会得到我认为的观点:

#include <iostream>
#include <cmath>

int main() {
    std::cout << "Enter your number: " << std::endl;

    int i = 0;
    std::cin >> i;

    int digits = (int) ceil( log10(i) );
    int modulo = pow(10, digits >> 1);
    std::pair<int, int> parts = { i / modulo,
                                  i % modulo };

    std::cout << parts.first << " " << parts.second << std::endl;
    int sum = parts.first + parts.second;
    std::cout << sum;
}

答案 2 :(得分:0)

这就是我想出来的。我改进了托马斯的答案并得出了它的结论。这可能是一个沉重的方法,但是,嘿,它不会是专业的摊牌。谢谢你的方法以及洛罗并且谢谢各位反馈伙伴们。最诚挚的问候。

#include <iostream>
#include <string>
#include <sstream>

int main()
{
    std::string text_number;
    std::cout << "Enter Number: ";
    std::cin>>text_number;
    const unsigned int length = text_number.length();  

    const unsigned int half_length = length / 2;
    std::string part1;
    std::string part2;
    unsigned int index;
    for (index = 0; index < half_length; ++index)
    {
      part1 += text_number[index];
    }
    for (; index < length; ++index)
    {
      part2 += text_number[index];
    }
    std::istringstream stream1(part1);
    std::istringstream stream2(part2);
    int first_half;
    int second_half;
    stream1 >> first_half;
    stream2 >> second_half;
    int S = 0,S1 =0;
    while(first_half>0)
    {
        int digit = first_half % 10;
        first_half /= 10;
        S += digit;
    }
        while(second_half>0)
    {
        int digit = second_half % 10;
        second_half /= 10;
        S1 += digit;
    }
    if(S > S1)
    {
        std::cout <<"First half half sum:" << S;
    }else {
        std::cout <<"second half sum:" << S1;
    }
    return 0;
}