c++ 连接整数

lmvvr0a8  于 11个月前  发布在  其他
关注(0)|答案(4)|浏览(136)

如何连接整数。比如,让我们说我做了一个简单的程序,像这样:

int concatenate(int i, int j) {

}

字符串
我给这个函数两个整数,i是1,j是9,我怎么才能把数字连接起来,得到123456789呢?

d4so4syb

d4so4syb1#

试试这个:

int concatenate(int i, int j) {
    int result = 0;
    for (int x = i; x <= j; x++) {
       result = result * 10 + x; 
    }
    return result;
}

字符串

h9vpoimq

h9vpoimq2#

另一种使用std::to_string的方法

#include <string>

int concatenate(int i, int j) {
    std::string result = "";
    for (; i <= j; ++i)
        result += std::to_string(i);
    return std::stoi(result);
}

字符串
但它可能很容易溢出。尝试将返回类型更改为long或更高。然后,std::stol将是有用的。

3wabscal

3wabscal3#

如果您将ij限制为域[0,9],那么10x10查找表将是一个高性能的解决方案:

long concatenate_lookup[10][10] = {
    {         0L,         1L,       12L,     123L,   1234L, 12345L, 123456L, 1234567L, 12345678L, 123456789L},
    {        10L,         1L,       12L,     123L,   1234L, 12345L, 123456L, 1234567L, 12345678L, 123456789L},
    {       210L,        21L,        2L,      23L,    234L,  2345L,  23456L,  234567L,  2345678L,  23456789L},
    {      3210L,       321L,       32L,       3L,     34L,   345L,   3456L,   34567L,   345678L,   3456789L},
    {     43210L,      4321L,      432L,      43L,      4L,    45L,    456L,    4567L,    45678L,    456789L},
    {    543210L,     54321L,     5432L,     543L,     54L,     5L,     56L,     567L,     5678L,     56789L},
    {   6543210L,    654321L,    65432L,    6543L,    654L,    65L,      6L,      67L,      678L,      6789L},
    {  76543210L,   7654321L,   765432L,   76543L,   7654L,   765L,     76L,       7L,       78L,       789L},
    { 876543210L,  87654321L,  8765432L,  876543L,  87654L,  8765L,    876L,      87L,        8L,        89L},
    {9876543210L, 987654321L, 98765432L, 9876543L, 987654L, 98765L,   9876L,     987L,       98L,         9L}
};

long concatenate(long i, long j ) {
    assert(i>=0 && i<=9 && j>=0 && j<=9);
    return concatenate_lookup[i][j];
} // end concatenate()

字符串
需要使用long而不是int来处理所有可能的输出。

xxb16uws

xxb16uws4#

您可以连接两个int或任意数量的int:

#include <vector>
#include <cmath>

int concat(int left, int right) {
    return (left * 10) + right;
}

int concat(std::vector<int> ints) {
    int sum = 0;
    for (int i=0; i<ints.size(); ++i) {
        sum += ints[i] * std::pow(10, i);
    }
    return sum;
}

字符串

相关问题