- 论坛徽章:
- 0
|
母牛数量算法
我也做了一个:
- #include <stdlib.h>;
- #include <stdio.h>;
- #define MAX_STRING_LEN 128
- static void Add(const char *, const char *, char *);
- int main(int argc, char **argv)
- {
- char szCowCount[MAX_STRING_LEN];
- char szLastCount3[MAX_STRING_LEN];
- char szCount3[MAX_STRING_LEN];
- char szCount2[MAX_STRING_LEN];
- char szCount1[MAX_STRING_LEN];
- int iYears;
- int i;
-
- iYears = atoi(argv[1]);
- for (i = 1; i <= iYears; ++i)
- {
- switch(i)
- {
- case 1:
- case 2:
- case 3:
- strcpy(szCowCount, "1");
- break;
- case 4:
- strcpy(szCowCount, "2");
- break;
- case 5:
- strcpy(szCowCount, "3");
- strcpy(szCount3, "1");
- strcpy(szCount2, "1");
- strcpy(szCount1, "1");
- break;
- default:
- if (strlen(szCowCount) >;= MAX_STRING_LEN)
- goto OUT;
- strcpy(szLastCount3, szCount3);
- Add(szCowCount, szCount3, szCowCount);
- //szCowCount = szLastCowCount + szCount3;
- Add(szCount3, szCount2, szCount3);
- //szCount3 += szCount2;
- strcpy(szCount2, szCount1);
- strcpy(szCount1, szLastCount3);
- break;
- }
- }
- OUT:
- printf("Yead:[%d]; Cow number:[%s].\n", iYears, szCowCount);
- }
- //
- // 字符串数据相加.
- //
- static void Add(const char *pcFirst, const char *pcSecond, char *pcAdd)
- {
- char szFirstAdd[MAX_STRING_LEN];
- char szAdd[MAX_STRING_LEN];
- int i;
- int iFirst;
- int iSecond;
- int iAdd;
- int iFirstLen;
- int iSecondLen;
- int iMinLen;
- int iOver = 0;
- int n;
-
- iFirstLen = strlen(pcFirst);
- iSecondLen = strlen(pcSecond);
- if (iFirstLen < iSecondLen)
- iMinLen = iFirstLen;
- else
- iMinLen = iSecondLen;
- for (i = 0; i < iMinLen; ++i)
- {
- szFirstAdd[i] = pcFirst[iFirstLen - i - 1] - 48 + pcSecond[iSecondLen - i - 1] + iOver;
- if (szFirstAdd[i] - 48 >;= 10)
- {
- szFirstAdd[i] = (szFirstAdd[i] - 48) % 10 + 48;
- iOver = 1;
- }
- else
- iOver = 0;
- }
- if (iFirstLen >; iMinLen)
- {
- for (; i < iFirstLen; ++i)
- {
- szFirstAdd[i] = pcFirst[iFirstLen - i - 1] + iOver;
- if (szFirstAdd[i] - 48 >;= 10)
- {
- szFirstAdd[i] = (szFirstAdd[i] - 48) % 10 + 48;
- iOver = 1;
- }
- else
- iOver = 0;
- }
- }
- else
- {
- for (; i < iSecondLen; ++i)
- {
- szFirstAdd[i] = pcSecond[iSecondLen - i - 1] + iOver;
- if (szFirstAdd[i] - 48 >;= 10)
- {
- szFirstAdd[i] = (szFirstAdd[i] - 48) % 10 + 48;
- iOver = 1;
- }
- else
- iOver = 0;
- }
- }
- if (iOver == 1)
- szFirstAdd[i++] = '1';
-
- for (n = 0; n < i; ++n)
- szAdd[i - n - 1] = szFirstAdd[n];
- szAdd[i] = '\0';
- strcpy(pcAdd, szAdd);
-
- return;
- }
复制代码
测试了几个跟flw兄的结果一致,不知道数字大了会不会错,请各位测试一下!
要是没有问题的话下次来讨论算法!!! |
|