@chawuciren
2018-11-16T09:43:44.000000Z
字数 1194
阅读 557
作业
#include<stdio.h>
#include<stdlib.h>
void ArrayMultiplication(int array1[],int l1,int array2[],int l2,int Result[],int l3);//用来计算并将结果存入数组
void carry(int Result[],int length);//进位
void site(int array1[],int l1,int n);//提取一个数的每一位并将其存进数组的函数
int main(){
int result[2568]={0};//存放每一次的结果
int arr1[5]={0};//一个因数
int arr2[2568]={1,0,0,0};//第二个因数
for(int i=2;i<=1000;i++){
site(arr1,5,i);
ArrayMultiplication(arr1,5,arr2,2568,result,2568); //乘法
carry(result,2568); //进位
for(int k=0;k<2568;k++){ //结果作为下一次的因数
arr2[k]=result[k];
}
}
for(int i=2568;i>0;i--){//打印
printf("%d",result[i]);
}
}
void ArrayMultiplication(int array1[],int l1,int array2[],int l2,int Result[],int l3){
int result=0;//每一次相乘的结果
int n=0;//每次取出结果的一位放在这里
int h=0;//h,a,b记录下标
int a=0;
int b=0;
for(int i=0;i<l1;i++){//该循环计算第二个因数的每一位与第一个因数相乘的结果
h=b;
for(int j=0;j<l2;j++){//计算第二个因数的每一位与第一个因数的每一位相乘的结果
h=a;
result=array1[i]*array2[j];
for(;result>0;){
n=result%10;
Result[h]+=n;//每次取出来结果的一位加在相应的位置
result/=10;
h+=1;
}
a+=1;
}
b+=1;
a=b;
}
return;
}
void carry(int Result[],int length){//进位
int a=0;
for(int i=0;i<length;i++){
if(Result[i]>=10){
a=Result[i];
Result[i]=Result[i]%10;
Result[i+1]=Result[i+1]+a/10;
}
}
return;
}
void site(int array1[],int l1,int n){//取每一位
for(int i=0;i<l1;i++){
array1[i]=n%10;
n/=10;
if(n==0)
break;
}
return;
}