关闭

PID4 / 数列 ☆

126人阅读 评论(0) 收藏 举报
分类:

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;
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:8077次
    • 积分:858
    • 等级:
    • 排名:千里之外
    • 原创:82篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类