题意:给出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即可。

#include <iostream>
#include <string.h>
#include <stdio.h>
#include <string>
#include <string.h> using namespace std;
int N,A;
int n1,n2,n3;//n1表示a的位数,n2表示b的位数,n3表示c的位数
int a[],b[],c[]; //a存储A的值,b存储N的值,c存储A^i的值
int ans[],tmp[]; //ans存储最后的结果 void add(int b[]) {
for(int i=; i<; i++) {
ans[i]=ans[i]+b[i];
if(ans[i]>) {
ans[i]-=;
ans[i+]++;
}
}
}
int multiply(int a1[],int b1[],int n1,int n2) {
memset(tmp,,sizeof(tmp));
for(int i=; i<n1; i++) {
for(int j=; j<n2; j++) {
tmp[i+j]+=a1[i]*b1[j];
}
}
for(int i=; i<n1+n2; i++) {
if(tmp[i]>=) {
tmp[i+]+=tmp[i]/;
tmp[i]%=;
}
}
/*
for(int i=0; i<n1+n2; i++)
c[i]=tmp[i];
*/
//第n1+n2位的序号为n1+n2-1,一开始就直接写了c[n1+n2]>0,结果就错了
if(tmp[n1+n2-]>)
return n1+n2;
else
return n1+n2-;
} int main() {
while(scanf("%d%d",&N,&A)!=EOF) {
memset(ans,,sizeof(ans));
//不写下面A=0的情况,会RE,但具体RE出在哪里就不知道了
if(A==) {
printf("0\n");
continue;
} if(A<)
n2=;
else
n2=;
a[]=A%;
a[]=A/;
memset(c,,sizeof(c));
c[]=;
n1=;
//不需要每次都重新计算A^i的值(不然会超时),后一次A^(i+1)可以利用前一次A^i的结果,每次计算的值存储在c数组里
for(int i=; i<=N; i++) {
n1=multiply(c,a,n1,n2);
//将乘后的结果存入到c数组,以便后一次利用
for(int j=; j<n1+n2; j++)
c[j]=tmp[j];
b[]=i%;
b[]=(i/)%;
b[]=i/;
if(i<)
n3=;
else if(i<)
n3=;
else
n3=;
//每次循环i*A^i的值存储在tmp数组里后,再与ans相加存储到ans数组中
multiply(c,b,n1,n3);
add(tmp);
}
//找到ans中最高位的索引
int idx=;
while() {
if(ans[idx]==) {
idx--;
continue;
} else
break;
}
for(int i=idx; i>=; i--) {
printf("%d",ans[i]);
}
printf("\n");
}
return ;
}

最新文章

  1. 一个从数据库中把数据导成txt的笨办法
  2. emmet插件快捷键:
  3. .NET面试题解析(04)-类型、方法与继承
  4. yii 常用路径
  5. python中文处理
  6. Javascript高性能动画与页面渲染
  7. C++里面方便的打印日志到文件
  8. 从入行到现在(.net)
  9. Windows环境下Android NDK环境搭建
  10. Android开源项目 Universal imageloader 源码研究之项目框架
  11. Hazelcase 简介
  12. 转载:做Java开发这一年 (火龙果软件)
  13. 修改emlog后台登录路径的方法(转)
  14. 日历上添加活动通知(Asp.net)
  15. [one day one question] nodejs require 缓存,无法检测文件变化
  16. 上海依图-电话面试-angularjs
  17. Linux网络技术管理及进程管理(week2_day4)--技术流ken
  18. linux信息收集
  19. eclipse4.2版本下面安装ADT,安装已经完成了,但没有ADT的那个图标显示
  20. postgresql数据库和mysql数据库的对比分析

热门文章

  1. Linux操作系统启动流程浅析
  2. hadoop2.2.0伪分布式搭建
  3. python 获取 mac 地址 的代码
  4. 如何学好PHP
  5. http 错误编号大全(转)
  6. 虚拟局域网VLAN
  7. Windows C盘格式化或者同平台迁移oracle数据库
  8. [转] 浅谈Microsoft MVP
  9. c 指针兼容性问题
  10. JavaScript判断闰年