题意:给出N,A,计算i*A^i(i=1~N)的和。1<=N<=30,0<=A<=15。

就是大数据运算,别的没什么,注意细节之处即可。

这题还要注意两个地方:

1.考虑A=0的情况,直接输出0即可。(我没写这个判断时,竟给我RE,而不是WA。。。不知道RE出在哪里了)

2.计算A^i的值的时候,不要每次都重新计算,会超时。后一次A^(i+1)可以利用前一次A^i的结果,乘以A即可。

  1. #include <iostream>
  2. #include <string.h>
  3. #include <stdio.h>
  4. #include <string>
  5. #include <string.h>
  6.  
  7. using namespace std;
  8. int N,A;
  9. int n1,n2,n3;//n1表示a的位数,n2表示b的位数,n3表示c的位数
  10. int a[],b[],c[]; //a存储A的值,b存储N的值,c存储A^i的值
  11. int ans[],tmp[]; //ans存储最后的结果
  12.  
  13. void add(int b[]) {
  14. for(int i=; i<; i++) {
  15. ans[i]=ans[i]+b[i];
  16. if(ans[i]>) {
  17. ans[i]-=;
  18. ans[i+]++;
  19. }
  20. }
  21. }
  22. int multiply(int a1[],int b1[],int n1,int n2) {
  23. memset(tmp,,sizeof(tmp));
  24. for(int i=; i<n1; i++) {
  25. for(int j=; j<n2; j++) {
  26. tmp[i+j]+=a1[i]*b1[j];
  27. }
  28. }
  29. for(int i=; i<n1+n2; i++) {
  30. if(tmp[i]>=) {
  31. tmp[i+]+=tmp[i]/;
  32. tmp[i]%=;
  33. }
  34. }
  35. /*
  36. for(int i=0; i<n1+n2; i++)
  37. c[i]=tmp[i];
  38. */
  39. //第n1+n2位的序号为n1+n2-1,一开始就直接写了c[n1+n2]>0,结果就错了
  40. if(tmp[n1+n2-]>)
  41. return n1+n2;
  42. else
  43. return n1+n2-;
  44. }
  45.  
  46. int main() {
  47. while(scanf("%d%d",&N,&A)!=EOF) {
  48. memset(ans,,sizeof(ans));
  49. //不写下面A=0的情况,会RE,但具体RE出在哪里就不知道了
  50. if(A==) {
  51. printf("0\n");
  52. continue;
  53. }
  54.  
  55. if(A<)
  56. n2=;
  57. else
  58. n2=;
  59. a[]=A%;
  60. a[]=A/;
  61. memset(c,,sizeof(c));
  62. c[]=;
  63. n1=;
  64. //不需要每次都重新计算A^i的值(不然会超时),后一次A^(i+1)可以利用前一次A^i的结果,每次计算的值存储在c数组里
  65. for(int i=; i<=N; i++) {
  66. n1=multiply(c,a,n1,n2);
  67. //将乘后的结果存入到c数组,以便后一次利用
  68. for(int j=; j<n1+n2; j++)
  69. c[j]=tmp[j];
  70. b[]=i%;
  71. b[]=(i/)%;
  72. b[]=i/;
  73. if(i<)
  74. n3=;
  75. else if(i<)
  76. n3=;
  77. else
  78. n3=;
  79. //每次循环i*A^i的值存储在tmp数组里后,再与ans相加存储到ans数组中
  80. multiply(c,b,n1,n3);
  81. add(tmp);
  82. }
  83. //找到ans中最高位的索引
  84. int idx=;
  85. while() {
  86. if(ans[idx]==) {
  87. idx--;
  88. continue;
  89. } else
  90. break;
  91. }
  92. for(int i=idx; i>=; i--) {
  93. printf("%d",ans[i]);
  94. }
  95. printf("\n");
  96. }
  97. return ;
  98. }

UVA 10523 Very Easy!!!(大数据加法、乘法)的更多相关文章

  1. 大数据的乘法实现——C语言

    1大数据乘法的算法思路: 输入两个字符串,得到结果,例如:123456789*123456789: 思路:1)首先 123456789*1 = 9   18  27  36  45  54  63   ...

  2. 剑指offer第12题打印从1到n位数以及大整数加法乘法

       字符和数字加减就是字符的ASCII码和数字直接加减. 方法一: 1)在字符串操作中给一个整形数字加(字符0)就是把它转化为字符,当然给一个字符减去(字符0)就可以把它转化为数字了:如果确实是最后 ...

  3. UVa 10523 - Very Easy !!!

    题目大意:给你一个公式,直接按照式子计算就可以了,要用到大数. import java.io.*; import java.util.*; import java.math.*; class Main ...

  4. 【大数据】Scala学习笔记

    第 1 章 scala的概述1 1.1 学习sdala的原因 1 1.2 Scala语言诞生小故事 1 1.3 Scala 和 Java  以及 jvm 的关系分析图 2 1.4 Scala语言的特点 ...

  5. 17_常用API_第17天(包装类、System、Math、Arrays、大数据运算)_讲义

    今日内容介绍 1.基本类型包装类 2.System类 3.Math类 4.Arrays类 5.大数据运算 01基本数据类型对象包装类概述 *A:基本数据类型对象包装类概述 *a.基本类型包装类的产生 ...

  6. 7、包装类、System、Math、Arrays、大数据运算

    基本类型封装 基本数据类型对象包装类概述 *A:基本数据类型对象包装类概述 *a.基本类型包装类的产生 在实际程序使用中,程序界面上用户输入的数据都是以字符串类型进行存储的.而程序开发中,我们需要把字 ...

  7. 基本类型包装类、System类、Math类、Arrays类、大数据运算

    1 基本类型包装类 Java中想对8种基本数据类型进行复杂操作很困难. 实际程序界面上用户输入的数据都是以字符串类型进行存储的. 程序开发中,需要把字符串转换成指定的基本数据类型. 1.1基本数据类型 ...

  8. 常用API(包装类、System、Math、Arrays、大数据运算)

    常用API 今日内容介绍 u 基本类型包装类 u System u Math u Arrays u BigInteger u BigDecimal 第1章 基本类型包装类 大家回想下,在第二天我们学习 ...

  9. java基础(17):包装类、System、Math、Arrays、大数据运算

    1. 基本类型包装类 大家回想下,在第三篇文章中我们学习Java中的基本数据类型时,说Java中有8种基本的数据类型,可是这些数据是基本数据,想对其进行复杂操作,变的很难.怎么办呢? 1.1 基本类型 ...

随机推荐

  1. 1.linux概述及如何访问

    1.linux终端访问及退出 1.1访问 linux有7个终端:(1个真实终端+6个虚拟终端) ctril+alt+Fn (Fn是指F1\F2..)切换终端 1.2退出: shutdown 缓冲一会关 ...

  2. ASCII 码表

    下面的 ASCII 码表包含数值在0-127之间的字符的十进制.八进制以及十六进制表示. 十进制 八进制 十六进制 字符 描述 0 0 00 NUL   1 1 01 SOH start of hea ...

  3. Arduino CNC Shiled 和 DRV8825驱动板的注意事项

    首先说明硬件:1) Arduino CNC Shiled V2.6 2)DRV8825驱动板 3)光驱步进电机  4)Arduino  uno R3 下图是本次主角是Arduino CNC Shile ...

  4. c++11: bind用法

    原型: template< class R, class F, class... Args > bind( F&& f, Args&&... args ); ...

  5. CentOS6.4安装LAMP环境

    1.配置防火墙,开放80.3306端口 vi /etc/sysconfig/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport - ...

  6. 关于LINQ一个简单例子

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cons ...

  7. 【WinForm】“System.Data.SqlClient.SqlConnection”的类型初始值设定项引发异常,无法识别的配置节 system.serviceModel

    出现问题的原因: 在本机上没有出现问题,让一个同事测试的时候,在另外一台电脑上出现连接数据库失败,系统不能打开的问题 在网上搜了一下,有说是数据库连接字符串错误的,有说app.config文件配置不匹 ...

  8. [JS进阶] 编写可维护性代码 (1)

    今天的web应用大至成千上万行的javascript代码,执行各种复杂的过程,这种演化让我们开发者必须得对可维护性有一定的认识!编写可维护性代码很重要,很多情况下我们是以他人的工作成果为基础,确保代码 ...

  9. Mac上安装brew

    用过ubuntu系统的都知道,上面有一个命令apt-get 很方便可以快速的安装很多软件 特别lamp环境 都是一键安装. 在mac上也有类似的命令 brew brew用法可以访问官网地址  http ...

  10. 定位表的数据块并且dump出来

    SQL> select * from city;         ID NAME ---------- ----------          7 Chicago          6 Jers ...