第一次寫大數,很好玩 @@。
原來加法不用一次一次算進位,
可以最後再一口氣算進位,有趣!
/* ACM 424 Integer Inquiry
* mythnc
* 2011/10/30 18:43:44
* run time: 0.004
*/
#include <stdio.h>
#include <string.h>
#define MAXARY 105
int addbig(int *, char *, int);
void printout(int *, int);
int main(void)
{
char tmp[MAXARY];
int big[MAXARY] = { 0 };
int len, count;
len = 0;
while (scanf("%s", tmp)) {
if (tmp[0] == '0' && tmp[1] == '\0') {
printout(big, len);
return 0;
}
count = addbig(big, tmp, len);
if (len < count)
len = count;
}
}
/* addbig: add big number, return it's length */
int addbig(int *big, char *tmp, int len)
{
int i, count;
for (count = 0, i = strlen(tmp) - 1; i > -1; i--)
big[count++] += tmp[i] - '0';
/* carry */
if (count < len)
count = len;
for (i = 0; i < count; i++) {
big[i + 1] += big[i] / 10;
big[i] %= 10;
}
if (big[i] != 0)
return count + 1;
return count;
}
/* printout: print out big number */
void printout(int *big, int n)
{
int i;
for (i = n - 1; i > - 1; i--)
printf("%d", big[i]);
printf("\n");
}
沒有留言:
張貼留言