输出几乎是正确的,除了第一个数字没有被删除。代码应该交换数字的第一个和最后一个数字,例如-如果输入是756,它应该给出657作为输出,现在代码显示7657,第一个数字没有被删除。-
package questionsOnLoops;
import java.lang.Math;
import java.util.Scanner;
public class OSJIDS {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner srv = new Scanner(System.in);
System.out.println("Enter any number: ");
int n = srv.nextInt();
int temp = n; //input number
int c = 0;
int f =n; //first digit
int l; //last digit
int result;
while(temp>0) {
temp = temp/10;
c = c+1;
}
while(f>=10) {
f = f/10;
}
g = n%10;
result = (n/10)*10+f;
result = (int) ((result%Math.pow(10,c))+(g*Math.pow(10,c)));
System.out.println(result);
}
}
我确实建议让您的变量更具描述性,但这是一个容易的解决方案。我猜从你的标题,你想交换第一个和最后一个数字?该方法将数字转换为字符串,使得在本例中追加和插入相对容易。
import java.util.*;
import java.io.*;
class Main {
public static void main(String[] args) {
Scanner srv = new Scanner(System.in);
System.out.println("Enter any number: ");
int num = srv.nextInt();
int lastDig = num;
int firstDig = num%10;
int len = 0;
while(lastDig>9) {
lastDig/=10;
len++;
}
String ans = Integer.toString(num).substring(1, len);
ans = firstDig+ans+lastDig;
System.out.println(ans);
}
}
让我们使用您的示例输入756。
去掉最后一位数字6,把第一位数字放在这里:
result = (n/10)*10+f;
现在result
是757。接下来,试着把6放在第一个7的位置:
k = (int) ((result%Math.pow(10,c))+(g*Math.pow(10,c)));
这并不完全正确。c
是3,数字的个数。所以Math.pow(10,c)
= 1000.0。但是你需要在这两个地方使用100,首先去掉7
,然后在那里添加6
。试着从表达式中的c
中减去1。
我对代码可读性的建议
- 在使用变量之前不要声明它;
- 使用更好的变量名。例如:
input
而不是n
length
或numberOfDigits
代替c
firstDigit
代替f
lastDigit
代替g
lastDigitReplaced
代替result
finalResult
代替k
你的代码让人很难看清到底发生了什么。
我在你的代码中看到了一些问题(仅次于可读性)。您能够检测到第一个和最后一个数字,但是得到的结果似乎包含一些错误
-
result = (input/10)*10+f;
这里取输入(506),将其除以10,再乘以10得到滥用整数,这样你的分数被删除,并恢复到原来的数字。然后再加上第一个数字。 -
通过上面的计算,您删除了最后一个数字,并添加了第一个数字作为最后一个数字。您仍然缺少添加第一个数字的步骤。根据你的计算结果创建一个新数字会更容易、更好。
计算新数字
你已经有了计算新数字所需的大部分成分。您已经计算了第一个数字和最后一个数字。为了得到结果,我们取最后一个数字,将它乘以10,直到它在正确的位置上成为第一个。接下来我们添加第一个数字,这样它就在新数字的最后最后,我们再次将中间数相加。(您可以通过从原始输入中删除第一个和最后一个数字来计算中间数字)
我已经用上面提到的变化更新了你的代码示例。我还为变量指定了更清晰的名称,以表明它们所包含的内容
public static void main(String[] args) {
Scanner srv = new Scanner(System.in);
System.out.println("Enter any number: ");
int input = srv.nextInt();
int temp = input;
int length = 0;
int firstDigit =input;
int lastDigit;
int inbetweenNumbers;
while(temp>0) {
temp = temp/10;
length = length+1;
}
while(firstDigit>=10) {
firstDigit = firstDigit/10;
}
lastDigit = input%10;
inbetweenNumbers = input - lastDigit;
inbetweenNumbers -= firstDigit * (int)Math.pow(10,length-1);
//calculating the result
int result = 0;
result += lastDigit * (int)Math.pow(10,length-1);
//Add last number (first digit of the input)
result += firstDigit;
//add the other numbers back
result+= inbetweenNumbers;
System.out.println(result+" "+length);
}