输出不正确(交换数字的第一位和最后一位)



输出几乎是正确的,除了第一个数字没有被删除。代码应该交换数字的第一个和最后一个数字,例如-如果输入是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
    • lengthnumberOfDigits代替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);
}

相关内容

  • 没有找到相关文章

最新更新