大数据阶乘 与 大数据相乘

大数据求阶乘,例如求 1977!

 

#include "stdio.h"

int main() {
    int i, j, n, num[10005];
    int x = 0, y, len = 1;
    n = 1977;
    num[0] = 1;
    for(i = 2; i <= n; i++) {
        for(j = 0; j < len; j++) {
            x += num[j] * i;
            num[j] = x % 10;
            x /= 10;
        }
        while(x) {
            num[j++] = x % 10;
            x /= 10; 
            len++;
        }
    }
    for(i = len - 1; i >= 0; i--){
        printf("%d",num[i]);
    }

    return 0;
}

大数据相乘,例如123456789 * 987654321。

数据大小不超过10^18时:

#include <bits/stdc++.h>
using namespace std;

long long x, y, mod;
int main() {
    scanf("%lld%lld%lld",&x,&y,&mod);
    long long sum = 0;
    while(y) {
        if(y & 1) {
            sum += x % mod;
        }
        y >>= 1;
        x = x * 2 % mod;
        sum = sum % mod;
    }
    printf("%lld\n",sum);
    return 0;
 
}

  

数组方法求解:

#include "stdio.h"
#include "string.h"

int n, m, mod;
int a[105], b[105], num[100005];
char s[105];
int main() {
    int i, j, x = 0, len = 0;//len为增加的位数
    gets(s);//字符串读入,然后转换成数组里面
    int l1 = strlen(s);
    for(i = 0; i < l1; i++) {
        a[l1 - i - 1] = s[i] - '0';
    }
    gets(s);
    int l2 = strlen(s);
    for(i = 0; i < l2; i++) {
        b[l2 - i - 1] = s[i] - '0';
    }
    for(i = 0; i < l2; i++) {
        for(j = len; j < l1 + len; j++) {
            x = x + b[i] * a[j - len];
            num[j] += x % 10;
            x /= 10;
            if(num[j] >= 10) {
                num[j + 1] += num[j] / 10;
                num[j] %= 10;
            }
        }
        while(x) {
            num[j++] = x % 10;
            x /= 10;
        }
        len++;
    }
    
    i = len + l2 - 1;
    while(num[i] == 0)i--;
    for(; i >= 0; i--) {
        printf("%d",num[i]);
    }

    return 0;
}

 

posted @ 2021-03-15 17:45  荣荣荣荣荣荣  阅读(115)  评论(0)    收藏  举报