九度OJ 1076 N的阶乘 大数乘法

    xiaoxiao2021-03-25  86

    这一题和上一题的大数加法很接近,但是不能再用数组的一位表示数字的一位了,因为乘到后面每次的乘数都是好几位的了,用一位根本无法表示,所以这里用数组的一位表示四位数。 因为一位表示四位数,所以输出时要注意,若为“0001”,不能当做“1”输出了,应用“d”来输出。

    题目描述: 输入一个正整数N,输出N的阶乘。

    输入: 正整数N(0<=N<=1000)

    输出: 输入可能包括多组数据,对于每一组输入数据,输出N的阶乘

    样例输入: 4 5

    样例输出: 24 120 1307674368000

    代码如下:

    #include <stdio.h> #include <stdlib.h> #include <string.h> struct bigint { int digit[1000]; int size; bigint operator * (const int &b) const //每次乘以一个小整数 { int carry = 0; bigint ans; memset(ans.digit,0,sizeof(ans.digit)); ans.size = 0; for(int i = 0; i < size; i++) { int t = digit[i] * b + carry; carry = t / 10000; ans.digit[ans.size++] = t % 10000; } if(carry > 0) ans.digit[ans.size++] = carry; return ans; } }; int main() { int n; while(scanf("%d",&n) != EOF) { if(n == 0) { printf("1\n"); continue; } bigint ans; memset(ans.digit,0,sizeof(ans.digit)); ans.size = 1; ans.digit[0] = 1; for(int i = 1; i <= n; i++) { ans = ans * i; } for(int i = ans.size-1; i >= 0; i--) { if(i == ans.size-1) printf("%d",ans.digit[i]); else printf("d",ans.digit[i]); } printf("\n"); } return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-32645.html

    最新回复(0)