C语言:我这样做哪里错了

【问题描述】

输入两个整数a(大于等于1且小于等于9)和n(大于等于1且小于等于80),编程求得并输出下面等式的值:

img

例如:若输入的a为5,n为6,则要计算下面公式的值:

555555-55555-5555-555-55-5。

【输入形式】

从标准输入读入整数a和n,两者之间以一个空格分隔。

【输出形式】

在标准输出上输出公式的计算结果。

【样例1输入】

5 6

【样例1输出】

493830

【样例1说明】

输入的a为5,n为6,按照上述公式计算的结果为493830。

【样例2输入】

5 20

【样例2输出】

49382716049382716060

【样例2说明】

输入的a为5,n为20,按照上述公式计算的结果为49382716049382716060。

【评分标准】该程序要求输出求得的公式的值,提交程序文件名为exam2.c或exam2.cpp。

#include
#include
int main()
{ int a,n,i;
long int sum=0,total;
scanf("%d %d",&a,&n);
long int arr[n];
for(i=0;i==n-1;i++)
{
for(int j=0;j==n-1;j++)
{
sum=a*pow(10,i)+sum;
arr[j]=sum;
}
}
total=arr[n-1];
for(i=n-2;i==0;--i)
{
total=total-arr[i];
}
printf("%ld\n",total);
return 0;
}

1 ≤ n ≤ 80,80位的10十进制整形是肯定装不下,用long long都装不下。

如果这道题是考数据结构,你可以构造链表从而实现任意位数的四则运算;

当然这道题是有技巧的,可以提取同类项用同余的性质将大树化小。

49382716049382716060,这个值太大了,用int肯定不行,改为double吧。最后输出为printf("%.0lf",total);