创建一个 c++ 程序,根据整数是奇数还是偶数,将整数数增加一倍和三倍

Creating a c++ program to double and triple the number of integers based on whether they are odd or even

本文关键字:整数 增加 数数 一倍 三倍 c++ 一个 创建 程序      更新时间:2023-10-16

我正在寻找一个程序的帮助,该程序将在整数中获取任意数量的数字,如果该数字是奇数,那么它将使每个整数加倍。如果数字是偶数,它将使每个整数增加三倍。例如 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.