【算法设计与分析】——(2+22+222+2222+……类推到n)

2+22+222+2222+……类推到n

算法题目

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:最后一张图速度之快!!!
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值