大数据求阶乘,例如求 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;
}