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 }
  • 相关阅读:
    nginx入门与实战
    python开发之virtualenv与virtualenvwrapper讲解
    Linux下的python3,virtualenv,Mysql、nginx、redis安装配置
    Linux系统基础优化及常用命令
    vim与程序员
    Shell基本命令
    Linux之文档与目录结构
    远程连接Linux
    oracle 根据时间戳查询date类型sql
    oracle 锁用户
  • 原文地址:https://www.cnblogs.com/FengZeng666/p/9682177.html
Copyright © 2011-2022 走看看