64,646
社区成员
发帖
与我相关
我的任务
分享
/*
* fibonacci.c
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NUM_LEN 32
#define CARRY 10
void calculateBigSum(int bigA[], int bigB[], int bigSum[])
{
int nIndex;
memset(bigSum, 0, MAX_NUM_LEN*sizeof(int));
for(nIndex = 0; nIndex < MAX_NUM_LEN; nIndex++)
{
bigSum[nIndex] += bigA[nIndex] + bigB[nIndex];
if(bigSum[nIndex] >= CARRY)
{
bigSum[nIndex] -= CARRY;
bigSum[nIndex+1]++;
}
}
}
void printBigNumber(int big[])
{
int nIndex;
for(nIndex = MAX_NUM_LEN - 1; nIndex >= 0; nIndex--)
printf("%d", big[nIndex]);
printf("\n");
}
void outputFibonacci(int fibonacci[3][MAX_NUM_LEN], int nIndex)
{
printf("%03d : ", nIndex+1);
printBigNumber(fibonacci[nIndex%3]);
calculateBigSum(fibonacci[nIndex%3], fibonacci[(nIndex-1)%3], fibonacci[(nIndex+1)%3]);
}
int main(int argc, char *argv[])
{
int fibonacci[3][MAX_NUM_LEN] = {0};
int nIndex = 0, nLoop;
fibonacci[0][0] = 1;
fibonacci[1][0] = 1;
if(argc != 2)
{
printf("Need a parameter.\n");
return -1;
}
nLoop = atoi(argv[1]);
printf("%03d : ", nIndex+1);
printBigNumber(fibonacci[nIndex%3]);
for(nIndex = 1; nIndex < nLoop; nIndex++)
outputFibonacci(fibonacci, nIndex);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
void output_number(unsigned long long llNum[], int nIndex)
{
printf("%d : %llu\n", nIndex+1, llNum[nIndex%3]);
llNum[(nIndex+1)%3] = llNum[nIndex%3] + llNum[(nIndex-1)%3];
}
int main(int argc, char *argv[])
{
unsigned long long llNum[3] = {1 ,1, 0};
int nIndex, nLoop;
if(argc != 2)
{
printf("Need a parameter.\n");
return -1;
}
nLoop = atoi(argv[1]);
printf("1 : 1\n");
for(nIndex = 1; nIndex < nLoop; nIndex++)
output_number(llNum, nIndex);
return 0;
}