首页 > 代码库 > uva 568(数学)
uva 568(数学)
题解:从1开始乘到n,因为结果只要最后一位,所以每乘完一次,只要保留后5位(少了值会不准确,刚开始只保留了一位,结果到15就错了,保留多了int会溢出,比如3125就会出错) 和下一个数相乘,接着保留5位,注意5位没有后导零,最后取5位中最后一个不是零的就可以了。
#include <iostream> #include <cstdio> using namespace std; int main() { int n; long int temp; while (scanf("%d", &n) != EOF) { if (n == 0) { printf("%5d -> 1\n", n); continue; } long int num; int a = 1; long int temp1; for (int i = 1; i <= n; i++) { num = 10; temp = (i * a) % num; if (temp == 0) { temp1 = i * a; while (temp == 0) { temp1 = temp1 / 10; temp = temp1 % 10; } a = temp1 % 100000; } else a = (i * a) % 100000; } printf("%5d -> %ld\n", n, temp); } return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。