首页 > 解决方案 > 如何在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);  

标签: java

解决方案


我会建议这样的算法:

  1. 将您的数字对数以 10 为底,然后加 1 以了解其位数(在您的示例中5:)
  2. 将旋转模数乘以位数作为“有效旋转”(在您的示例中2:)
  3. 除以位数减去旋转次数并朝零舍入,以获得旋转的位数(在您的示例中12:)
  4. 取除以 3. 的其余部分,并将其乘以 10 的旋转次数的幂(34500在您的示例中得到结果)
  5. 添加旋转的数字(结果34512在您的示例中)

由您来编写代码;)

PS:在现实生活中,您永远不应该将 anint用于这些操作(长度有限,难以处理)。ABigDecimal或 aString会更明智。


推荐阅读