###前提・実現したいこと
すごく初歩的な質問かもしれませんが、下記のコードを実行すると、途中から計算結果が実際の数値と違ってきてしまいます。
どこがおかしいのでしょうか?
内容としては100の階乗を求めるプログラムです。
91の段階で結果がおかしくなります。
→検算したところ、9を掛けた時点でおかしくなるようです。
###該当のソースコード
C++#include
1#include <iomanip> 2#include <string> 3using namespace std; 4 5#define DIGIT_BUF 1000 6 7void ToArray(int number, int* num) 8{ 9 int count = 0; 10 11 while (number) { 12 num[count] = number % 10; 13 count++; 14 number = number / 10; 15 } 16} 17 18int Digit(int* num) 19{ 20 int count = DIGIT_BUF - 1; 21 while (1) { 22 if (num[count] != 0) 23 return count; 24 count--; 25 } 26} 27 28 29void ArrayMul(int* num1, int* num2, int* num) 30{ 31 int num1_digit = Digit(num1); 32 int num2_digit = Digit(num2); 33 for (int i = 0; i < DIGIT_BUF; i++) { 34 num[i] = 0; 35 } 36 for (int i = 0; i < num1_digit + 1; i++) { 37 for (int j = 0; j < num2_digit + 1; j++) { 38 num[j + i] += num1[i] * num2[j]; 39 } 40 } 41 for (int i = 0; i < Digit(num) + 1; i++) { 42 if (num[i] / 10) { 43 num[i + 1] += num[i] / 10; 44 num[i] = num[i] % 10; 45 } 46 } 47} 48 49void Factorial(int number, int* num) { 50 int hoge1[DIGIT_BUF] = {}, hoge2[DIGIT_BUF] = {}, hoge3[DIGIT_BUF] = {}; 51 ToArray(number, hoge3); 52 for (number; number > 1; number--) { 53 memcpy(hoge1, hoge3, sizeof(int) * DIGIT_BUF); 54 ToArray(number - 1, hoge2); 55 ArrayMul(hoge1, hoge2, hoge3); 56 int count = Digit(hoge3); 57 cout << number - 1 << " "; 58 while (count >= 0) { 59 cout << hoge3[count]; 60 count--; 61 } 62 cout << endl; 63 } 64 memcpy(num, hoge3, sizeof(int) * DIGIT_BUF); 65} 66int main() 67{ 68 int result[DIGIT_BUF] = {}; 69 70 Factorial(100, result); 71 72}
よろしくお願いします。
回答7件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/28 11:08
2016/10/01 15:36