程式碼如下
#include <stdio.h>
#include <stdlib.h>
typedef struct
{/* 大數資料類型 */
int H; /* 1 H = 1000 000 000 = 10^9 = 1G L*/
int L; /* L(Max) = 999 999 999*/
}Big_int;
void Big_int_add(Big_int *a, int b)
{/* 大數與一般數相加用 */
a->L += b;
if(a->L >= 1000000000)
{/* 進位控制 */
a->H += a->L / 1000000000;/*進位*/
a->L %= 1000000000;/*取餘數*/
}
}
void Big_int_sum(Big_int *a, Big_int *b)
{/* 大數相加用 */
a->L += b->L;
a->H += b->H;
if(a->L >= 1000000000)
{
a->H += a->L / 1000000000;/*進位*/
a->L %= 1000000000;/*取餘數*/
}
}
void Big_int_print(Big_int *a)
{/* 大數印出用 */
if(a->H > 0)
{/* 高位元印出用*/
printf("%d", a->H);
printf("%09d", a->L);/*L<=99999999,則須補零印出*/
}
else
printf("%d", a->L);
}
int main(void)
{
int index = 0, n[100], max = 0;
while(scanf("%d", &n[index]) != EOF)
{/*輸入所有資料*/
if(max < n[index])
max = n[index];/*n之最大值*/
index++;/*資料數*/
}
int i, count = 0;
Big_int f = {0}, g = {0};
for(i = 1; i <= max; i++)
{/*迴圈數值疊加開始*/
/*f += i;*/
Big_int_add(&f, i);
/*g += f;*/
Big_int_sum(&g, &f);
if(n[count] == i)
{/*疊加到目標便印出*/
/*printf("%ld %ld\n", f, g);*/
Big_int_print(&f);
printf(" ");
Big_int_print(&g);
printf("\n");
count++;
}
}
return 0;
}