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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機 求階乘 -C語言

[復制鏈接]
跳轉到指定樓層
樓主
ID:90014 發(fā)表于 2015-9-15 15:04 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. #define M 20000 /* 最大結果位數(shù),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("輸入計算其階乘的數(shù):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 標記相乘后“可能的”第一個有效數(shù)字的標號 */

  54. if(pc%2 == 0) /* 再處理一次使 flag 正好標記第一個有效數(shù)字的標號 */
  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) /* 相乘函數(shù) */
  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) /* 輸出結果函數(shù) */
  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空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久高清| 成人三级影院 | 欧美黑人巨大videos精品 | 欧美二三区 | 天天视频一区二区三区 | 欧美精品中文字幕久久二区 | 国产成人福利在线观看 | 亚洲欧美视频 | 久久激情视频 | 五月激情婷婷在线 | 日本一区二区高清不卡 | 久久久成人精品 | 久久久久1| 欧美日韩国产高清视频 | 国产精品亚洲视频 | 成人婷婷| 亚洲欧美激情精品一区二区 | 久久国内 | 成人二区 | 成人综合一区 | 久久伊人一区 | 91在线观| 毛片免费观看 | 亚洲精品久久 | 国产免费一区二区三区网站免费 | 国产精品久久国产精品 | 99re国产视频 | 草久网| 自拍视频国产 | 911精品国产 | 在线免费中文字幕 | 一区二区三区av | 色综合99| 色婷婷av一区二区三区软件 | 全部免费毛片在线播放网站 | 动漫www.被爆羞羞av44 | 久久久久久国产精品三区 | 久久九九99 | 91视频免费黄 | 成人免费大片黄在线播放 | 国产亚洲精品久久久久动 |