创建一个 c++ 程序,根据整数是奇数还是偶数,将整数数增加一倍和三倍
Creating a c++ program to double and triple the number of integers based on whether they are odd or even
我正在寻找一个程序的帮助,该程序将在整数中获取任意数量的数字,如果该数字是奇数,那么它将使每个整数加倍。如果数字是偶数,它将使每个整数增加三倍。例如 123 = 112233 或 122 = 111222222。我正在寻找一种方法来获取公式,我为任意数量的数字运行它。 这是我到目前为止所拥有的:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int num1, answer;
cin >> num1;
answer = num1 % 2;
if (answer == 1)
{
cout << num1 % 1000/100 << num1 % 1000/100 << num1 % 100/10 << num1 % 100/10 << num1 % 10 << num1 % 10;
}
else if (answer == 0)
{
cout << num1 % 1000/100 << num1 % 1000/100 << num1 % 1000/100 << num1 % 100/10 << num1 % 100/10 << num1 % 100/10 << num1 % 10 << num1 % 10 << num1 %10;
}
cout << endl;
return 0;
}
截至目前,它只会做长度为 3 位的数字。有没有办法对任何数字做这些公式?
这
适用于整数最大值内的任何整数。如果你需要更大的数字,你可以使用标识符long
来增加int
的大小,对于任何更大的数字,我建议boostmultiprecision
:
#include <iostream>
#include <cmath>
using namespace std;
int convert(int param) {
int out = 0;
int powerOfTen = 0;
int temp;
int loopAmount;
if (param % 2 == 0) {
loopAmount = 3;
}
else {
loopAmount = 2;
}
while (param > 0) {
temp = param % 10;
param /= 10;
for (int i = 0; i < loopAmount; i++) {
out += (temp * pow(10, powerOfTen++));
}
}
return out;
}
实际上无法完成,因为您需要提前知道该数字是奇数还是偶数,或者有无限的 RAM 来容纳潜在的无限长度整数。
一种简单的方法,可以处理任意长度的字符串,直到您的计算机内存不足:
- 将用户输入读入
std::string
。 - 测试字符串中的所有字符是否都是有效数字。如果不是,则用户未输入有效的整数。
- 提示:使用算法库中的
isdigit
和基于范围的 for 循环或std::all_of
- 提示:您可能需要测试第一个字符的负号。如果这样做,请从输入字符串中删除负号(
std::string::substr
在这里应该有帮助)并将其插入输出流中。 - 打印错误消息并
return
是否有任何字符不是数字。
- 提示:使用算法库中的
- 测试最后一个字符的奇数或偶数
- 提示:获取字符串中最后一个字符的一种简单方法是
std::string::back
。 - 提示:您可以将 将最后一个字符转换为
int
,用于许多常见的字符编码,并带有int lastdigit = lastchar - '0';
- 非常便宜的黑客:在ASCII编码中,最有可能使用的编码,奇数的字符都有奇数编码。在这种非便携式情况下,
lastchar % 2
就足够了。 - 如果字符为奇数,则将重复计数器设置为 2
- 如果字符甚至设置为重复计数器为 3
- 提示:获取字符串中最后一个字符的一种简单方法是
- 对于字符串中的每个数字
- 将数字插入输出流重复计数器时间。这可以通过 for 循环来完成,但有大量更快的方法。
您只需从数字副本中删除数字并将它们相加即可。 例如,重复数字三次:
long result = 0;
long copy = num;
long power = 1;
while (copy > 0)
{
long digit = copy % 10;
result += digit*111*power;
copy /= 10;
power *= 1000;
}
我会把两位数的情况留给你弄清楚......
编辑:标准整数似乎不会让你解决这个问题。将它们更改为long
.
相关文章:
- 如何反转整数参数包
- enum是C++中的宏变量还是整数变量
- 努力将整数转换为链表。不知道我在这里做错了什么
- 数组索引的值没有增加
- 整数不会重复超过随机数
- 在C++中手动调整数组大小
- 检查输入是否不是整数或数字
- C++使用整数的压缩数组初始化对象
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 为什么我的代码在输出中增加了93天
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 如何只允许用户输入正整数
- 如何在c++中从文本文件中逐行读取整数
- 整数类型应该显式转换(例如"int"到"无符号")还是只会增加混乱?
- 检查整数是否增加了C++
- 大整数增加,我知道理论..在实践中仍然生锈
- C++ 增加整数大小限制
- 创建一个 c++ 程序,根据整数是奇数还是偶数,将整数数增加一倍和三倍
- c++ -不断增加一个整数