如何创建所有可能的数字,从给定的数字开始,新数字的所有数字都向右移动一个槽位?例如,如果我们有 1234。我想生成 4123、3412 和 2341。
到目前为止我得出的结论是:
int move_digits(int a)
{
int aux = 0;
aux = a % 10;
for(int i=pow(10, (number_digits(a) - 1)); i>0; i=i/10)
aux = aux * 10 + ((a % i) / (i/10));
return aux;
}
但它不起作用。
子程序 number_digits 看起来像这样(它只计算给定数字的位数):
int number_digits(int a)
{
int ct = 0;
while(a != 0)
{
a = a/10;
ct++;
}
return ct;
}
最佳答案
我认为没有必要单独编写函数 number_digits。 我会把函数 move_digits 写得更简单
#include <iostream>
#include <cmath>
int move_digits( int x )
{
int y = x;
double n = 0.0;
while ( y /= 10 ) ++n;
return ( x / 10 + x % 10 * std::pow( 10.0, n ) );
}
int main()
{
int x = 1234;
std::cout << x << std::endl;
std::cout << move_digits( x ) << std::endl;
}
关于c++ - 如何将数字的每个数字向右排列一步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21955361/