【问题描述】
输入两个整数a(大于等于1且小于等于9)和n(大于等于1且小于等于80),编程求得并输出下面等式的值:
例如:若输入的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);