算法题目
2+22+222+2222+……类推到n
n+nn+nnn+nnnn+nnnnn+……
-
这个题目可以认为是我上一篇博客的演变,上一篇如果弄懂了,这个自然而然就会啦~
上一篇博客链接:高精度✖长整型
算法分析
-
第一,可能最后n特别大,所以在存储方面,我们考虑使用int类型数组存储结果。
-
第二,由于整个题目很有规律,所以我们在检索信息时,只需要把有用的信息挑选出来,然后输入到计算机中,这样既可以避免浪费,又可以节省时间空间。
-
第三,补充第二点,比如2+22+222+2222+22222+222222,我们不需要把这些数都一个个的输进去,我们只需要知道一共有6位数相加(也可以认为最后一个加数是有6个2),再知道加的基数是2(即每一位都是2)即可,所以输入(6,2),其他的依此类推。
代码实现
#include<stdio.h>
//2+22+222+2222+22222+222222+…… 可以简化认为:最后加数为n位 数字为m
int main()
{
int n,m; //n表示最后加数位数(也可以表示多少个数相加),m表示加数的基数
int s[256]; //存放最后加法结果
int i,j; //i循环加法计数变量 j结果数组计数变量
int d=0; //进位
int b; //单次计算结果
printf("请输入加法个数n,加法基数m(1~9):\n");
scanf("%d%d",&n,&m);
for(i=n,j=0;i>=1,j<n;i--,j++)
{
b=i*m+d;
s[j]=b%10;
d=b/10;
}
if(d!=0) //最后n++一下 方便输出
{
s[n]=d;
n++;
}
for(i=n-1;i>=0;i--)
printf("%d",s[i]);
return 0;
}
结果示例
- 示例一
- 示例二
- 示例三
PS:最后一张图速度之快!!!