/*调试完全没毛病不知道系统为什么通不过,先记录一下*/ /*k的次幂分别位于序列(从1开始数)的2的次幂处1,2,4,8,16,32,...,因此只需要确定k的次幂位置, 第i个次幂到第i+1个次幂之间的数分别为第i个次幂加上第i个次幂依次加上前面的数*/ #include<stdio.h> #include"malloc.h" int main() { long long func(int k,int n); int k,N,j,t=1,i=0; scanf("%d%d",&k,&N); long long *pt=(long long*)malloc(N*sizeof(long long)); for(j=0;func(2,j)-1<N;j++) pt[func(2,j)-1]=func(k,j); //分别为各次幂寻找位置 for(j=2;j<N;j++) { if(j>func(2,t)-1&&j<func(2,t+1)-1) { pt[j]=pt[func(2,t)-1]+pt[i]; //填充次幂之间的数 i++; } else {t++;i=0;} } printf("%lld\n",pt[N-1]); return 0; } long long func(int k,int n) { long long sum=1; int i; for(i=1;i<=n;i++) sum*=k; return sum; }
0.0分
0 人评分
C语言训练-字符串正反连接 (C语言代码)浏览:727 |
简单的a+b (C++语言代码)浏览:895 |
WU-拆分位数 (C++代码)浏览:819 |
C语言程序设计教程(第三版)课后习题7.2 (C语言代码)浏览:570 |
DNA (C语言代码)浏览:440 |
C语言程序设计教程(第三版)课后习题9.8 (C语言代码)浏览:672 |
单词个数统计 (C语言代码)浏览:1046 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:593 |
C语言程序设计教程(第三版)课后习题11.3 (C语言代码)浏览:2207 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:522 |