如何从给定的数字开始创建所有可能的数字,其中新数字的所有数字都向右移动一个插槽?例如,如果我们有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;
}
答案 0 :(得分:1)
我认为没有必要编写单独的函数number_digits。 我会写函数move_digits simpler
#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;
}
答案 1 :(得分:0)
n
的最后一位数字:n % 10
。number / 10
。n
,那么您可以使用d
1000 * d + n
那就是说,你可能想要计算
aux = pow(10, number_digits - 1) * (aux % 10) + (aux / 10)
答案 2 :(得分:0)
计算a/(number_digits(a) - 1)
和a%(number_digits(a) - 1)
你的答案是(a%(number_digits(a) - 1))*10 + a/(number_digits(a) - 1)
int i =0 ;
int len = number_digits(a);
while(i < len){
cout << (a%(len - 1))*10 + a/(len - 1) <<endl;
a = (a%(len - 1))*10 + a/(len - 1);
}
答案 3 :(得分:0)
void move_digits(int a)
{
int digits = 0;
int b = a;
while(b / 10 ){
digits++;
b = b / 10;
}
for (int i = 0; i < digits; ++i)
{
int c = a / 10;
int d = a % 10;
int res = c + pow(10, digits) * d;
printf("%d\n", res);
a = res;
}
printf("\n");
}
int main()
{
move_digits(12345);
}