C++ 将一个 INT 分开并将其相加
C++ Separate an INT and Sum it's halves
我想要一些逻辑甚至代码来显示给我。问题正如标题所说。例:我输入 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;
}
好的,我进入了这个话题。我可以总结一下。如何将整数分成两半?
假设我们取了一个整数 1234,并分为两部分:12 和 34:
int part_1 = 12;
int part_2 = 34;
求和或相加,我们可以使用加法运算符:
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;
缺少很多错误处理,包括检查数字的#是否是偶数,但我认为你会明白这一点:
#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;
}
这就是我想出的。我改进了托马斯的回答,得出了一个结论。这可能是沉重的方法,但嘿,这不会是专业的摊牌。也感谢您的方法以及lorro,并感谢您的反馈。此致敬意。
#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;
}
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 运行同一解决方案的另一个项目的项目
- 挂起和取消挂起一个文件DLL
- 用C++中的一个变量定义一个常量
- 函数向量_指针有不同的原型,我可以构建一个吗
- 在c++中用vector填充一个简单的动态数组
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 预处理器:插入结构名称中的前一个行号
- 我在c++代码中生成了一个运行时#3异常
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 从链接列表c++中删除一个项目
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '