【问题标题】:Concatenating integers连接整数
【发布时间】:2016-09-28 21:38:57
【问题描述】:

如何连接整数。就像,假设我做了一个这样的简单程序:

int concatenate(int i, int j) {

}

我给了那个函数两个整数。 i 将是 1,j 将是 9。我如何能够连接数字以便获得 123456789

【问题讨论】:

  • 我在考虑有一个名为 count 的 int,然后随着计数的增加,它还会将该数字添加到前一个数字上。因此,如果 i 为 3,j 为 5,count 也将等于 i 并添加一个数字,直到达到 j
  • 如果i 是 3 而j5,那么预期的输出是什么?
  • @Pang, 345 只是尝试一些我想到的愚蠢的事情。 :P
  • 如果i > j会发生什么?请添加有关您的问题的更多详细信息。

标签: c++


【解决方案1】:

试试这个:

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

【讨论】:

    【解决方案2】:

    使用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 会很有用。

    【讨论】:

      【解决方案3】:

      如果您将 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 来处理所有可能的输出。

      【讨论】:

        猜你喜欢
        • 2019-01-22
        • 1970-01-01
        • 1970-01-01
        • 2020-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多