UVa 568 - Just the Facts

本文详细介绍了UVa568-JusttheFacts问题的解题思路、代码实现及关键参考链接。通过计算任意非负整数的阶乘最后非零数字,展示了如何避免溢出并高效求解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

UVa 568 - Just the Facts

1题目

===================

Just the Facts
The expression N !, read as `` N factorial," denotes the product of the first N positive integers, where N is nonnegative. So, for example,

N N!
01
11
22
36
424
5120
103628800

For this problem, you are to write a program that can compute the last non-zero digit of any factorial for ($0 \le N \le 10000$). For example, if your program is asked to compute the last nonzero digit of 5!, your program should produce ``2" because 5! = 120, and 2 is the last nonzero digit of 120.

Input

Input to the program is a series of nonnegative integers not exceeding 10000, each on its own line with no other letters, digits or spaces. For each integer N , you should read the value and compute the last nonzero digit of N !.

Output

For each integer input, the program should print exactly one line of output. Each line of output should contain the value N , right-justified in columns 1 through 5 with leading blanks, not leading zeroes. Columns 6 - 9 must contain `` -> " (space hyphen greater space). Column 10 must contain the single last non-zero digit of N !.

Sample Input

1
2
26
125
3125
9999

Sample Output

    1 -> 1
    2 -> 2
   26 -> 4
  125 -> 8
 3125 -> 2
 9999 -> 8



Miguel A. Revilla
1998-03-10

===================

2思路

题目大意是计算N!最后一个非0位,为了避免溢出,代码中使用了模运算。 为了取得非0位,一旦计算结果是10的倍数,就将末位的0通过除法消除。

3代码

/*
 * Problem: UVa 568 - Just the Facts
 * Lang: ANSI C
 * Time: 0.019
 * Author: minix
 */

#include <stdio.h>

#define N 100000000000

int main() {
  long long sum;
  int i, n;

  while (scanf ("%d", &n) != EOF) {
    sum = 1;
    for (i=1; i<=n; i++) {
      sum *= i;
      sum %= N;
      while (sum % 10 == 0) sum /= 10;
    }
    while (sum != 0 && sum % 10 == 0) sum /= 10;
    printf ("%5d -> %lld\n", n, sum % 10);
  }

  return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值