我有一个通过 Rcpp 的函数来反转整数
#include <Rcpp.h>
using namespace Rcpp;
//' Reverse an integer
//'
//' @param x A single integer.
//' @export
// [[Rcpp::export]]
int reverse_integer(int x) {
int reverse = 0;
while(x != 0){
int remainder = x%10;
reverse = reverse*10 + remainder;
x/=10;
}
return reverse;
}
这对于没有前导零或尾随零的数字来说效果很好
reverse_integer(123) == 321
但是,当有零时,它们将被删除,即
reverse_integer(100) == 1
如何最好地修改此函数,以便我仍然可以将其作为整数进行操作,但不会丢失零?
最佳答案
您需要返回一个字符串。在任何编程语言中,001 与 1 都不是不同的整数。方法如下:
#include <Rcpp.h>
using namespace Rcpp;
//' Reverse an integer
//'
//' @param x A single integer.
//' @export
// [[Rcpp::export]]
std::string reverse_integer(int x) {
int reverse = 0;
int ndigits = 0;
while(x != 0){
int remainder = x%10;
reverse = reverse*10 + remainder;
x/=10;
ndigits++;
}
std::string output(ndigits, '\0');
char * outputp = &output[0];
std::string fmt_string = "%0" + std::to_string(ndigits) + "d";
sprintf(outputp, fmt_string.c_str(), reverse);
return output;
}
示例:
reverse_integer(103400)
[1] "004301"
关于c++ - 在 rccp int 中保留前导零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60590492/