【问题标题】:how can i print reverse of a big 10 digit number by using arrays?如何使用数组打印 10 位大数字的反转?
【发布时间】:2021-04-23 12:40:57
【问题描述】:

我一直在尝试编写一个函数来打印最大 10 位数字的 reveres 版本使用数组...但这里的问题是我的代码无法打印反向一个大的 10 位数字(如 9999999999 或 9784562312)正确...我不知道问题出在哪里! 有人有意见吗? (对不起,如果我有语法错误,我不是母语人士)

这里是代码:

int main(){

    const int size = 10;    
    int number, revers;
    
    cin >> number;
    revers = inverse( number, size );
    cout<<revers;
}


int inverse( int n, int size){

    int sum=0, array[size]={0}, i=0;
        
        for( i=0 ; n>=1 ; i++ ){
            
            array[i] = n % 10;
            n /= 10;
        }
    
    int l=i;
        i--;
    
    for(int j=0 ; j<l ; j++, i--){
        sum += pow(10,i)*array[j];
    }
    
    return sum;
}

【问题讨论】:

  • int 的范围是 -21474836482147483647 -- 如果需要有符号值,请使用较大的类型,例如 uint64_tint64_t
  • std::string 是一个数组。
  • 您不需要数组。 (并且你不应该使用 pow 处理整数问题。)
  • 我也写了没有数组,但我只是想知道为什么它不能这样工作..

标签: c++ arrays c++11 reverse


【解决方案1】:

您应该使用类似unsigned long long 而不是int,因为该值超过了最大 int 类型。

【讨论】:

    【解决方案2】:

    您可以只使用标准库提供的可用函数。 std::string 数据类型是一个数组,如果你坚持的话:

    #include <cstdint>
    #include <string>
    #include <algorithm>
    #include <iostream>
    
    void printr(std::uint64_t x) {
      std::string s = std::to_string(x);
      std::reverse(std::begin(s),std::end(s));
      std::cout << s;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-26
      • 1970-01-01
      • 1970-01-01
      • 2018-09-15
      • 2017-09-02
      • 2022-11-25
      • 2019-02-14
      相关资源
      最近更新 更多