-2

我是java程序的新手我有一个简单的问题是这样的:

我试试这个

int sum=1;

    int x=0;
     Scanner in = new Scanner(System.in);
     System.out.println("input number");
     int num=in.nextInt();

     for(int i=1 ;i<=num;i++)
     {
         sum=sum*i;
    }
     {
         System.out.println("the sum is of all number from 1 to"+" "+num+" "+"is:"+sum);
     }

     int last=sum % 10;

     {
       System.out.print("the last number is: "+last); 
     }

但我想打印最后一个不等于 0 的整数

4

2 回答 2

2

要打印不等于 0 的最后一位数字:

System.out.print("the last number is: " + (num+"").replaceAll(".*([1-9])0*", "$1"));

这个答案的重要部分是调用中的正则表达式replaceAll()。它匹配整个输入,同时捕获最后一个非零数字作为组 1。替换项是对组 1 的反向引用,因此整个输入被最后一个非零数字替换,有效地提取了它。

如果数字为零,这仍然有效 - 结果将保持不变,因为没有匹配项。

这可以通过首先删除所有尾随零,然后使用子字符串来获取最后一个数字来实现,但是它需要移动代码行,并且您必须为零数字边缘情况添加额外的代码,尽管它可能是更容易理解。

于 2013-09-12T14:35:41.693 回答
2

请注意,您的 sum 变量实际上包含所有值的乘积。

要检索最后一个非零值,您可以执行以下操作:

if (sum == 0)
{
    System.out.print("no last number found"); 
}
else
{
    int last=sum%10;
    while (last == 0)
    {
        sum /= 10;
        last =sum%10;
    }

    System.out.print("the last number is: "+last); 
}
于 2013-09-12T14:39:16.737 回答