[关闭]
@chawuciren 2018-11-16T09:43:44.000000Z 字数 1194 阅读 462

1000!

作业


  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. void ArrayMultiplication(int array1[],int l1,int array2[],int l2,int Result[],int l3);//用来计算并将结果存入数组
  4. void carry(int Result[],int length);//进位
  5. void site(int array1[],int l1,int n);//提取一个数的每一位并将其存进数组的函数
  6. int main(){
  7. int result[2568]={0};//存放每一次的结果
  8. int arr1[5]={0};//一个因数
  9. int arr2[2568]={1,0,0,0};//第二个因数
  10. for(int i=2;i<=1000;i++){
  11. site(arr1,5,i);
  12. ArrayMultiplication(arr1,5,arr2,2568,result,2568); //乘法
  13. carry(result,2568); //进位
  14. for(int k=0;k<2568;k++){ //结果作为下一次的因数
  15. arr2[k]=result[k];
  16. }
  17. }
  18. for(int i=2568;i>0;i--){//打印
  19. printf("%d",result[i]);
  20. }
  21. }
  22. void ArrayMultiplication(int array1[],int l1,int array2[],int l2,int Result[],int l3){
  23. int result=0;//每一次相乘的结果
  24. int n=0;//每次取出结果的一位放在这里
  25. int h=0;//h,a,b记录下标
  26. int a=0;
  27. int b=0;
  28. for(int i=0;i<l1;i++){//该循环计算第二个因数的每一位与第一个因数相乘的结果
  29. h=b;
  30. for(int j=0;j<l2;j++){//计算第二个因数的每一位与第一个因数的每一位相乘的结果
  31. h=a;
  32. result=array1[i]*array2[j];
  33. for(;result>0;){
  34. n=result%10;
  35. Result[h]+=n;//每次取出来结果的一位加在相应的位置
  36. result/=10;
  37. h+=1;
  38. }
  39. a+=1;
  40. }
  41. b+=1;
  42. a=b;
  43. }
  44. return;
  45. }
  46. void carry(int Result[],int length){//进位
  47. int a=0;
  48. for(int i=0;i<length;i++){
  49. if(Result[i]>=10){
  50. a=Result[i];
  51. Result[i]=Result[i]%10;
  52. Result[i+1]=Result[i+1]+a/10;
  53. }
  54. }
  55. return;
  56. }
  57. void site(int array1[],int l1,int n){//取每一位
  58. for(int i=0;i<l1;i++){
  59. array1[i]=n%10;
  60. n/=10;
  61. if(n==0)
  62. break;
  63. }
  64. return;
  65. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注