久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2581|回復: 0
打印 上一主題 下一主題
收起左側

單片機 求階乘 -C語言

[復制鏈接]
跳轉到指定樓層
樓主
ID:90014 發表于 2015-9-15 15:04 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. #define M 20000 /* 最大結果位數,DOS能訪問的內存有限,最好不要超過 30000 位*/
  2. #define N (M+5)
  3. main()
  4. {
  5. int Num;
  6. register int i,j,k,flag;
  7. register unsigned int n,m,pc;
  8. unsigned char str_n[5],result_0[N],result_1[N];
  9. void fun_print_result(char *result,int flag);
  10. int fun_mul(char *a,char *b,char *c,int flag);

  11. printf("輸入計算其階乘的數:Num = ");
  12. scanf("%d",&Num);

  13. if(Num >= 100)
  14. {
  15. printf("\n正在進行階乘運算. . .\n");
  16. printf("已完成 00000 的階乘,請等待. . .");
  17. }

  18. for (j=0;j<N;j++)
  19. {
  20. result_1[j] = 0; result_0[j] = 0;
  21. }
  22. result_1[N-1] = 1;
  23. for(i=0;i<5;i++)
  24. {
  25. str_n[i] = 0;
  26. }

  27. n = 1;
  28. pc = 0; flag = N-1;
  29. while (n <= Num)
  30. {
  31. m = n;
  32. k = 4;
  33. while(m > 0)
  34. {
  35. str_n[k] = m%10; m /= 10; k--;
  36. }
  37. if (pc%2 == 0)
  38. {
  39. if(fun_mul (str_n,result_1,result_0,flag) != 1)
  40. {
  41. printf("\n\n結果溢出!當前所設置的最大結果為 %d 位 已完成 %d 的階乘",M,pc);
  42. exit(0);
  43. }
  44. }
  45. else
  46. {
  47. if(fun_mul (str_n,result_0,result_1,flag) != 1)
  48. {
  49. printf("\n\n結果溢出!當前所設置的最大結果為 %d 位 已完成 %d 的階乘",M,pc);
  50. exit(0);
  51. }
  52. }

  53. flag = flag-(4-k); /* flag 標記相乘后“可能的”第一個有效數字的標號 */

  54. if(pc%2 == 0) /* 再處理一次使 flag 正好標記第一個有效數字的標號 */
  55. {
  56. if(result_0[flag] == 0) flag++;
  57. }
  58. else
  59. {
  60. if(result_1[flag] == 0) flag++;
  61. }
  62. n++; pc++;
  63. if((pc)%25 == 0 && Num >= 100 && pc >= 100)
  64. {
  65. printf("\r已完成 %5d",pc);
  66. }
  67. }
  68. if(Num >= 100) printf("\n");
  69. if ((pc-1)%2 == 0)
  70. {
  71. fun_print_result (result_0,flag);
  72. }
  73. else
  74. {
  75. fun_print_result (result_1,flag);
  76. }
  77. }

  78. int fun_mul(char *a,char *b,char *c,int flag) /* 相乘函數 */
  79. {
  80. register int i,j;
  81. for(j=flag;j<N;j++) c[j]=0;
  82. for(i=4;i>=0;i--)
  83. {
  84. if(a)
  85. {
  86. for (j=N-1;j>=flag;j--)
  87. {
  88. if(b[j])
  89. {
  90. c[i+j-4] += a[i]*b[j];
  91. }
  92. if(c[i+j-4] > 9)
  93. {
  94. c[i+j-5] += c[i+j-4]/10; c[i+j-4] %= 10;
  95. }
  96. }
  97. }
  98. }
  99. if(flag < 10)
  100. {
  101. if (c[0] || c[1] || c[2] || c[3] || c[4]) /*** 結果溢出判斷 ***/
  102. {
  103. return 0;
  104. }
  105. }
  106. return 1;
  107. }

  108. void fun_print_result(char *result,int flag) /* 輸出結果函數 */
  109. {
  110. int p;
  111. printf("\n本次計算結果共有 %d 位,如下:\n\n",N-flag);
  112. for(p=flag;p<N-1;p++)
  113. {
  114. printf("%d",result[p]);
  115. if((p+1-flag)%(21*80) == 0)
  116. {
  117. printf("\n計算結果太長,請按任一鍵看下一屏,Esc 退出");
  118. if(getch() == 27)
  119. {
  120. clrscr(); exit(0);
  121. }
  122. clrscr();
  123. }
  124. }
  125. printf("%d",result[N-1]);
  126. printf("\n\n[OK]");
  127. }
復制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩精品免费在线观看 | www.天堂av.com | 91精品国产91久久久久久密臀 | 在线观看你懂的网站 | 成人在线免费观看视频 | 欧美日韩一二三区 | 欧美一区二区三区四区视频 | www.玖玖玖 | 97视频网站 | 婷婷开心激情综合五月天 | 精产国产伦理一二三区 | 一区二区三区欧美在线 | 国产丝袜一区二区三区免费视频 | 国产区免费视频 | 99久久精品视频免费 | 日韩毛片免费看 | 国产欧美日韩一区二区三区在线观看 | www中文字幕 | 95国产精品| 黄一级| 日本黄色一级片视频 | 日韩高清中文字幕 | 国产激情91久久精品导航 | 午夜丰满少妇一级毛片 | 日韩在线观看一区 | 成人一区二区三区在线观看 | 久久在视频 | 午夜天堂精品久久久久 | 成人黄色网址大全 | 黄网站在线播放 | 天天拍夜夜爽 | 亚洲一区二区三区四区在线观看 | 亭亭五月激情 | 一级午夜aaa免费看三区 | 欧美成人精品一区二区男人看 | 色综合99 | 黄色在线免费观看视频 | 在线看av网址 | 色就干| 成人免费视频网站在线观看 | 国产精品成人一区二区 |