Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 创建一个c++;根据整数是奇数还是偶数,将整数数加倍或加倍的程序_C++ - Fatal编程技术网

C++ 创建一个c++;根据整数是奇数还是偶数,将整数数加倍或加倍的程序

C++ 创建一个c++;根据整数是奇数还是偶数,将整数数加倍或加倍的程序,c++,C++,我正在寻找一个程序的帮助,该程序将采取整数中的任意数字,如果该数字是奇数,那么它将加倍每个整数。如果数字为偶数,则每个整数将增加三倍。例123=112233或122=11122222。我在寻找一种方法来计算这个公式,我可以对任意数量的数字进行计算。以下是我到目前为止的情况: #include <iostream> #include <cmath> using namespace std; int main() { int num1, answer; ci

我正在寻找一个程序的帮助,该程序将采取整数中的任意数字,如果该数字是奇数,那么它将加倍每个整数。如果数字为偶数,则每个整数将增加三倍。例123=112233或122=11122222。我在寻找一种方法来计算这个公式,我可以对任意数量的数字进行计算。以下是我到目前为止的情况:

#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