2014年1月15日 星期三

[C/C++] [VB.NET] - 階層範例,求n!問題

C/C++ 版本
// 階層範例
// (C) 2014 Stubio Awei.
// 2014/1/15
// Source.cpp

#include <iostream>

using namespace std;

int main()
{
 const int SIZE_SUM = 100; // 存放運算結果之陣列大小
 const int LENGTH_SUM = SIZE_SUM -1; // 存放運算結果之陣列長度
 int sum[SIZE_SUM]; // 存放運算結果之陣列
 int N = 12; // 階層數
 int temp = 0; // 暫存,乘開後放置
 int temp0 = 0; // 暫存,進位數

 memset(sum, 0, sizeof(sum)); // 將 sum 全部初始化為零 (0)
 sum[0] = 1; // 階層第一個數都為 1 ,故先給予設定
 for (int i = 2; i < N + 1; i++)
 {
  for (int j = 0; j < SIZE_SUM; j++)
  {
   temp = sum[j] * i + temp0; // 將該位數的數值乘出來,並將上一個進位數加起來
   sum[j] = temp%10; // 取得 temp 所乘出的個位數數字,使用餘除
   temp0 = temp/10; // 取得 temp 所乘出的十位數以上數值
  }
 }

 for (int i = LENGTH_SUM; i>-1; i--)
 {
  // 取得運算出來的數值長度
  if (sum[i] != 0)
  {
   N = i;
   break;
  }
 }

 // 輸出運算結果 sum
 for (int i = N; i >-1; i--)
 {
  cout << sum[i];
 }
 cout << endl;
 system("pause");
}
VB 版本
// 階層範例
Module Module1

    Sub Main()
        Const SIZE_SUM As Integer = 100  ' 存放運算結果之陣列大小
        Const LENGTH_SUM As Integer = SIZE_SUM - 1 ' 存放運算結果之陣列長度
        Dim sum(SIZE_SUM) As Integer ' 存放運算結果之陣列
        Dim N As Integer = 12 ' 階層數
        Dim temp As Integer = 0 ' 暫存,乘開後放置
        Dim temp0 As Integer = 0 ' 暫存,進位數

        sum(0) = 1 ' 階層第一個數都為 1 ,故先給予設定

        For i As Integer = 2 To N
            For j As Integer = 0 To SIZE_SUM
                temp = sum(j) * i + temp0 ' 將該位數的數值乘出來,並將上一個進位數加起來
                sum(j) = temp Mod 10 ' 取得 temp 所乘出的個位數數字,使用餘除
                temp0 = temp \ 10 ' 取得 temp 所乘出的十位數以上數值
            Next
        Next

        For i As Integer = LENGTH_SUM To 0 Step -1
            ' 取得運算出來的數值長度
            If Not sum(i) = 0 Then
                N = i
                Exit For
            End If
        Next

        ' 輸出運算結果 sum
        For i As Integer = N To 0 Step -1
            Console.Write(sum(i))
        Next
        Console.WriteLine()
        Console.Read()
    End Sub

End Module

沒有留言:

張貼留言