大數問題通常用數組來模擬計算。下面給出hdu 1002 的代碼。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 1000
int g_a[MAX_LEN];
int g_b[MAX_LEN];
int g_ans[MAX_LEN];
char g_stra[MAX_LEN + 1];
char g_strb[MAX_LEN + 1];
int main()
{
int t, i, j, n;
int la, lb;
int len;
char startOutput;
//freopen("test.txt", "r", stdin);
scanf("%d", &t);
for (n = 1; n <= t; ++n)
{
scanf("%s", g_stra);
scanf("%s", g_strb);
la = strlen(g_stra);
lb = strlen(g_strb);
j = 0;
for (i = la - 1; i >= 0; --i)
{
g_a[j++] = g_stra[i] - '0';
}
j = 0;
for (i = lb - 1; i >= 0; --i)
{
g_b[j++] = g_strb[i] - '0';
}
memset(g_ans, 0, sizeof(g_ans));
for (i = 0, j = 0; i < la && j < lb; ++i, ++j)
{
g_ans[i] += (g_a[i] + g_b[i]);
if (g_ans[i] >= 10)
{
g_ans[i] -= 10;
g_ans[i+1]++;
}
}
while (i < la)
{
g_ans[i] += g_a[i];
if (g_ans[i] >= 10)
{
g_ans[i] -= 10;
g_ans[i+1]++;
}
++i;
}
while (j < lb)
{
g_ans[j] += g_b[j];
if (g_ans[j] >= 10)
{
g_ans[j] -= 10;
g_ans[j+1]++;
}
++j;
}
len = (i > j) ? i : j;
if (g_ans[len] >= 10)
{
g_ans[len] -= 10;
g_ans[++len]++;
}
printf("Case %d:\n", n);
printf("%s + %s = ", g_stra, g_strb);
startOutput = 0;
while (len >= 0)
{
if (startOutput)
{
printf("%d", g_ans[len]);
}
else if (g_ans[len])
{
startOutput = 1;
printf("%d", g_ans[len]);
}
--len;
}
if (n != t)
{
printf("\n\n");
}
else
printf("\n");
}
return 0;
}