glu_cky的博客

未来再远,远不过我一路向前的步伐。

PID4 / 数列 ☆

https://www.rqnoj.cn/problem/4

     
题目描述

给定一个正整数k(3≤k≤15),把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列,例如,当k=3时,这个序列是:

1,3,4,9,10,12,13,…

(该序列实际上就是:3^0,3^1,3^0+3^1,3^2,3^0+3^2,3^1+3^2,

3^0+3^1+3^2,…)

请你求出这个序列的第N项的值(用10进制数表示)。

例如,对于k=3,N=100,正确答案应该是981。

输入格式

输入只有1行,为2个正整数,用一个空格隔开:

k N

(k、N的含义与上述的问题描述一致,且3≤k≤15,10≤N≤1000)。

输出格式

输出为计算结果,是一个正整数(在所有的测试数据中,结果均不超过2.1*10^9)。(整数前不要有空格和其他符号)。

看那个和的形式其实就是二进制形式。

/* ***********************************************
Author        :Lu_cky
Created Time  :2016年05月30日 星期一 23时05分31秒
File Name     :main.cpp
************************************************ */

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
const int SIZE=1e3+10;
const int maxn=1<<30;
int my_pow(int x,int n){
	int ret=1;
	while(n>0){
		if(n&1)ret*=x;
		x*=x;
		n>>=1;
	}
	return ret;
}
int main()
{
    //freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);
 	int k,n;
	while(scanf("%d%d",&k,&n)!=EOF){
		int f=0,ans=0;
		while(n){
			if(n%2)ans+=my_pow(k,f);
			f++;
			n/=2;
		}
		printf("%d\n",ans);
	}
    return 0;
}


阅读更多
个人分类: 数论 rqnoj
想对作者说点什么? 我来说一句

80端口被PID4 占用问题

2017年07月24日 886KB 下载

没有更多推荐了,返回首页

不良信息举报

PID4 / 数列 ☆

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭