zoukankan      html  css  js  c++  java
  • 数列求和

    给定某数字A(1A9)以及非负整数N(0N100000),求数列之和S=A+AA+AAA++AAA(N个A)。例如A=1, N=3时,S=1+11+111=123。

    输入格式:

    输入数字A与非负整数N。

    输出格式:

    输出其N项数列之和S的值。

    输入样例:                       输入样例:

    1 3               6 100

    输出样例:                       输出样例:

    123              7407407407407407407407407407407407407407407407407407407407407407407407407407407407407407407407407340

    解题思路:  我们发现,求和时个位数上共有N个A相加,十位数上共有N-1个A相加,依此类推。因此,可以直接计算个位数的结果,十位数的结果,等等。每个数位的结果为(N-K)*A加上进位值,需要O(1)时间;总共有N个数位,因此时间复杂度为O(N)。

    大整数的表示方法:可以将大整数的十进制表示中的每个数为值放在数组中的对应位置。

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 
     4 int sum[120000000];     //由于N的值可以很大,可能超过整数的表示范围,所以用数组来保存计算结果
     5 
     6 int main()
     7 {
     8     int A, N;
     9     scanf("%d %d", &A, &N);
    10     if(N == 0)
    11     {
    12         printf("0");
    13         return 0;
    14 
    15     }
    16     sum[0] = 0;
    17     int carry = 0;    //carry表示进位值
    18     for(int i = N; i > 0; --i)
    19     {
    20         int s = A * i + carry;
    21         sum[i] = s % 10;
    22         carry = s / 10;
    23     }
    24     if(carry)         //注意最后的进位(最高位的进位值)要加上!!!
    25         sum[0] = carry;
    26     if(sum[0])
    27         printf("%d", sum[0]);
    28     for(int i = 1; i <= N; ++i)
    29         printf("%d", sum[i]);
    30 
    31     return 0;
    32 }
  • 相关阅读:
    shell脚本比较字符串相等
    从自身的经历讨论手工测试与自动化测试
    读《Linux Shell脚本攻略》(第2版) 一遍、二遍体会
    也许开发需要的只是一份简单明了的表格
    linux 命令:tr 的简单使用
    docker的数据持久化
    docker基础操作
    centos7 docker镜像源设置
    DockerUI(图形化管理)
    Docker 常用命令
  • 原文地址:https://www.cnblogs.com/FengZeng666/p/9682177.html
Copyright © 2011-2022 走看看