myFactorial関数を作成した後に階乗を計算するコードを書きましたが、大きな数値を処理しようとしたときにそれを乱しました。ファクタシアルを計算する際の長形式の処理
私は長い形式を使用して16を超える数値を扱おうとしていますが、結果は無関係で、コードの第2部分では奇妙なものになります。 結果は入力で変更する必要はありませんが、変更は必要です。
私は以下のコメントで自分のコードを共有:
main.cの
#include <stdio.h>
#include <stdlib.h>
int main()
{
int yourNumber;
int i;
//Take the input
printf("I highly recommend you to make the command window fullscreen. Otherwise, the complete output will not be seen.\n");
printf("Enter a positive integer and I will tell you its factorial.\n");
scanf("%d", &yourNumber);
//Calculate factorial and print it in three ways
printf("Factorial of %d is %d!\n",yourNumber,myFactorial(yourNumber));
printf("Using long format, factorial of %d is %lld!\n",yourNumber,myFactorial(yourNumber));
printf("In hex: %#08X!",myFactorial(yourNumber));
// Here on, second part of my code begins
// Calculate and print factorials of numbers from 1 to 20 in %d format
printf("\n\n\nLet's see more d's!\n\n");
for (i = 1; i<21; i++) printf("%d\n", myFactorial(i));
// Calculate and print factorials of numbers from 1 to 20 in %lld format
printf("\n\n\nNow let's see more lld's!\n\n");
for (i = 1; i<21; i++) printf("%lld\n", myFactorial(i));
return 0;
}
myfactorial.c
#include <stdio.h>
long long int myFactorial(int bar) {
long long out = 1;
int i;
for (i=1; i<=bar; i++)
{
out *= i;
}
return out;
}
あなたは直面している問題を詳しく教えていただけますか?階乗出力は正しい:http://cpp.sh/8twwh –
こんにちは、長いlongを使用すると、long rangeのオーバーフローも発生します。あなたが本当に学ぶことを望むなら、これを通過してください。 http://www.geeksforgeeks.org/factorial-large-number/ または https://discuss.codechef.com/questions/7349/computing-factorials-of-a-huge-number-in-cc-チュートリアル –