在这里,我尝试使用for循环反转数字,但是当n = 1234时,它仅给出输出432。 请解释为什么for循环的行为不同。
当我使用条件while(n> 0)在while循环中尝试相同的问题时,它按预期工作并提供了所需的输出
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int rev=0;
for(int i=1;i<=n;i++){
int temp=n%10;
n=n/10;
rev=rev*10+temp;
}
System.out.println(rev);
当n = 1234时,预期输出为4321,但输出为432
答案 0 :(得分:0)
似乎您需要阅读有关Java循环的更多信息
使用t0 = datenum('1900-01-01 00:00:00', 'yyyy-mm-dd HH:MM:SS');
time = time/24 + t0;
time = datetime(time,'ConvertFrom','datenum');
循环时,您会遍历从1(在您的情况下)到n的所有数字
,当您使用for
时,直到n为0
您会发现最终得到的值之间存在差异,我真的建议您在继续进行:)
答案 1 :(得分:0)
了解您要首先实现的目标:反转数字
输入:num
(1)初始化reverse_num = 0
(2)在num> 0时循环
(a)将reverse_num乘以10,然后将num的余数
除以10到rev_num
reverse_num = reverse_num * 10 + num%10;
(b)用num除以10
(3)打印reverse_num
您使用的for循环正在考虑从1到1234(1、2、3、4、5、6 ...... 1234)的所有值
使用while循环时,如果我们需要num> 0,则只有一个条件,因此它可以工作。
Scanner sc=new Scanner(System.in);
int num=sc.nextInt();
int reversed = 0;
while(num >0) {
int digit = num % 10;
reversed = reversed * 10 + digit;
num /= 10;
}
System.out.println(reversed);
}
答案 2 :(得分:0)
尝试这样的方式:
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int rev=0;
while(n>0)
{
int temp=n%10;
rev=rev*10+temp;
n=n/10;
}
System.out.println(rev);
在
时使用会更好答案 3 :(得分:0)
该算法如何与while一起使用以及为什么需要剪切直到l n = 0(以1234为例):while(执行此操作直到l n == 0)。
第一行:temp = n%10,所以temp = 1234%10 = 4。第二行:n = n / 10,所以n = 1234/10 = 123 第三行:rev = rev * 10 + temp,所以0 * 10 + 4 = 4;
第一行:temp = n%10,因此temp = 123%10 = 3,第二行:n = n / 10,因此n = 123/10 = 12, 第三行:rev = rev * 10 + temp所以4 * 10 + 3 = 43;
第一行:temp = n%10,所以temp = 12%10 = 2第二行:n = n / 10,所以n = 12/10 = 1.2(1,int) 第三行:rev = rev * 10 + temp so 43 * 10 + 2 = 432;
第一行:temp = n%10,因此temp = 1%10 = 1 第二行:n = n / 10,所以n = 1/10 = 0.1(0,int),第三行:rev = rev * 10 + temp 所以REV是432 * 10 + 1 = 4321 ;