如何连接整数。比如,让我们说我做了一个简单的程序,像这样:
int concatenate(int i, int j) { }
字符串我给这个函数两个整数,i是1,j是9,我怎么才能把数字连接起来,得到123456789呢?
i
j
123456789
d4so4syb1#
试试这个:
int concatenate(int i, int j) { int result = 0; for (int x = i; x <= j; x++) { result = result * 10 + x; } return result; }
字符串
h9vpoimq2#
另一种使用std::to_string的方法
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将是有用的。
long
std::stol
3wabscal3#
如果您将i和j限制为域[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来处理所有可能的输出。
int
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; }
4条答案
按热度按时间d4so4syb1#
试试这个:
字符串
h9vpoimq2#
另一种使用
std::to_string
的方法字符串
但它可能很容易溢出。尝试将返回类型更改为
long
或更高。然后,std::stol
将是有用的。3wabscal3#
如果您将
i
和j
限制为域[0,9],那么10x10查找表将是一个高性能的解决方案:字符串
需要使用
long
而不是int
来处理所有可能的输出。xxb16uws4#
您可以连接两个int或任意数量的int:
字符串