- 論壇徽章:
- 0
|
母牛數(shù)量算法
我也做了一個(gè):
- #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);
- }
- //
- // 字符串?dāng)?shù)據(jù)相加.
- //
- 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;
- }
復(fù)制代碼
測(cè)試了幾個(gè)跟flw兄的結(jié)果一致,不知道數(shù)字大了會(huì)不會(huì)錯(cuò),請(qǐng)各位測(cè)試一下!
要是沒(méi)有問(wèn)題的話下次來(lái)討論算法。! |
|