C++ 创建一个c++;根据整数是奇数还是偶数,将整数数加倍或加倍的程序
我正在寻找一个程序的帮助,该程序将采取整数中的任意数字,如果该数字是奇数,那么它将加倍每个整数。如果数字为偶数,则每个整数将增加三倍。例123=112233或122=11122222。我在寻找一种方法来计算这个公式,我可以对任意数量的数字进行计算。以下是我到目前为止的情况:C++ 创建一个c++;根据整数是奇数还是偶数,将整数数加倍或加倍的程序,c++,C++,我正在寻找一个程序的帮助,该程序将采取整数中的任意数字,如果该数字是奇数,那么它将加倍每个整数。如果数字为偶数,则每个整数将增加三倍。例123=112233或122=11122222。我在寻找一种方法来计算这个公式,我可以对任意数量的数字进行计算。以下是我到目前为止的情况: #include <iostream> #include <cmath> using namespace std; int main() { int num1, answer; ci
#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;
}
#包括
#包括
使用名称空间std;
int main()
{
int num1,答案;
cin>>num1;
答案=num1%2;
如果(答案=1)
{
cout您只需从数字副本中删除数字并将其相加即可。例如,将数字重复三次:
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
这适用于任何在整数最大值范围内的整数。如果需要更大的数字,可以使用标识符long
增加int
的大小,我建议boost\m超精密度
:
#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;
}
#包括
#包括
使用名称空间std;
int转换(int参数){
int out=0;
int=0;
内部温度;
整数循环量;
如果(参数%2==0){
循环量=3;
}
否则{
循环量=2;
}
while(参数>0){
温度=参数%10;
参数/=10;
for(int i=0;i
实际上无法完成,因为您需要提前知道该数字是奇数还是偶数,或者使用无限内存来保存可能无限长的整数
一种简单的方法,可以处理任意长度的字符串,直到计算机内存耗尽:
- 将用户输入读入
std::string
- 测试字符串中的所有字符是否都是有效数字。如果有无效数字,则表示用户未输入有效整数。
- 提示:使用算法库中的
isdigit
和基于范围的for循环或std::all_of
- 提示:您可能需要测试第一个字符是否有负号。如果需要,请从输入字符串中删除负号(
std::string::substr
在这里应该有帮助)并将其插入到输出流中
- 打印错误消息,如果任何字符不是数字,则返回
- 测试最后一个字符是否为奇数或偶数
- 提示:获取字符串中最后一个字符的简单方法是
std::string::back
- 提示:对于许多常用字符编码,您可以使用
int lastdigit=lastchar-'0';
- 非常便宜的破解:在最有可能使用的ASCII编码中,奇数的字符都有奇数编码。在这种不可移植的情况下,
lastchar%2
就足够了
- 如果字符为奇数,则将重复计数器设置为2
- 如果字符为偶数,则将重复计数器设置为3
- 对于字符串中的每个数字
- 将数字插入输出流重复计数器时间。这可以通过for循环完成,但是有很多更快的方法
将数字放在字符串中?如何使用循环?另外,您实际上没有结果编号,只有输出外观。请澄清。您希望输出为int
(或long
,或其他形式)我认为把输出作为一个字符串会更容易。我对C++是新的,所以以前从来没有遇到过。我将先尝试第二个答案,看看是否能让它与我所需要的工作相联系。下面的选民解释来解释。据我所知,这是有效的,并且不涉及字符串或浮点转换,如HA。在其他评论/回答中,有人建议“采用任意位数的程序[。]”这不可能,你知道它不可能,而且任意长度的解决方案实际上没有你提出的那么复杂。我把这个问题理解为要求将一个3位数的算法推广到N位数。我不认为OP的意思是“任何数字”这意味着完全忽略所有固定宽度的整数类型。事实上,稍微扩展的引号是“在一个整数中接受任意数字的程序”。显然,两个人以相同的方式阅读这个问题,因此,在对所有不符合您理解的内容进行否决表决之前,可能会要求OP进行澄清。“可以使用任意位数的程序[。]”这不可能,你知道它不可能,使用boost::multiprecision来解决这个问题的建议完全是过火了。但是你不是从原始帖子中挑选了这句话吗?整个内容是这样的”程序将取整数中的任意位数,如果该数字为奇数,则每个整数将加倍。如果该数字为偶数,则每个整数将加倍。"至于建议boost::multiprecision,如果原始海报想要扩展到更大的数字,那么在未来一段时间内有什么建议呢?任何数字都是任何数字,整数不一定意味着int
。也就是说,我没有一个很好的解决方案来解决无限情况,因为要确定奇数或偶数你需要最后一个数字。要得到最后一个数字,要么需要输入两次整数,要么需要无限内存来保存整数。我正在进行下一票,因为你不必为一个措词糟糕的问题付费。把“任意数字”的问题放在一边有那么一会儿,@Stephen的解决方案除了一个问题外,在任何情况下都很有效。pow
需要与float进行转换。对于较大的整数,精度问题开始蔓延。如果我将您的int
s转换为long
s,然后尝试数字123456
,我会得到1122