如何在java中旋转给定数字的整数?

时间:2018-06-29 13:09:07

标签: java

是否需要在不使用数组或字符串的情况下找到更多关于转数的最佳代码?

我已经编写了一个最佳解决方案,但是需要进行更优化的代码

其中输入: 12345 旋转镜头:- 2 输出为:- 34512

代码在这里:

int a=12345;
int n=2;
int count=0;
int tmp=1,t1=1;
int k=1;
int v=a;

for(int i=0;i<=v;i++) {
    count++;
    v/=10;
    tmp*=10;            
}
for(int j=0;j<=count-n;j++) {
    t1*=10;
}
tmp=tmp*10/t1;
k=a%t1;

k=k*tmp+(a/t1);


System.out.println(k);  

3 个答案:

答案 0 :(得分:4)

我建议使用这样的算法:

  1. 使数字对数以10为底,然后加1以知道其数字位数(在您的示例中:5
  2. 将以位数为单位的旋转模数作为“有效旋转数”(在您的示例中为2
  3. 除以位数减去旋转数,然后舍入为零,以得到旋转的数字(在您的示例中为12
  4. 进行3的除法运算,然后将其乘以10等于转数的幂(在您的示例中为34500的结果)
  5. 添加旋转数字(示例中为34512的结果)

由您决定编写代码;)

PS:在现实生活中,切勿使用int进行这些操作(长度有限,难以处理)。 BigDecimalString会更明智。

答案 1 :(得分:2)

好吧,这仅是一个方向的移动,但我认为您可以对其进行修改以获得完整的结果

private static int rotate(int dig, int n)
{
    int digLen = numDigits(dig);
    int first = (int) (dig / Math.pow(10D, (digLen - n)));

    int last = dig - (int) (first * Math.pow(10D, (digLen - n)));

    int lastInFront = (int)(last * Math.pow(10, n));

    return lastInFront + first;
}

private static int numDigits(int dig)
{
    return (int)Math.log10(dig) + 1;
}

答案 2 :(得分:-1)

您可以使用以下语句:

a = (int)((a%Math.pow(10,(length-move)))*Math.pow(10,move)+(a-(a%Math.pow(10,(length-move))))/Math.pow(10,length-move));

其中

a是数字本身

length是数字总数

move是要移入该数字以上的位数

我已经使用以下语句来计算数字中的位数:

for(; temp != 0; temp/=10, ++length);

其中temp = a;

请在下面找到所有可能动作的有效屏幕截图:

enter image description here