[NOIP2006]数列

文章讲述了如何通过将输入的正整数N转换为2进制,利用k的次方和的形式解决一个未找到明显规律的编程问题。C语言代码展示了如何实现这一思路。
摘要由CSDN通过智能技术生成

链接:https://ac.nowcoder.com/acm/contest/19305/1019
来源:牛客网
 

题目描述

输入描述:

输入1行,为2个正整数,用一个空格隔开:k N(k、N的含义与上述的问题描述一致,且3 ≤ k ≤ 15,10 ≤ N ≤ 1000 )。

输出描述:

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

示例1

输入

3 100

输出

981

此题一直没找到规律,后来想着转换为2进制,然后用k的次方和形式输出可以的到正确答案。应该就是要找到规律这个题就比较好做了

#include<stdio.h>
#include<math.h>
int main()
{
    int a[1000];
    int k;
    long long N;
    int i=0;//实际长度为i+1
    long long  sum=0;
    scanf("%d%ld",&k,&N);
    //将位数转为2进制数
    while(N!=0)
    {
        a[i++]=N%2;
        N=N/2;
    }
    for(int j=0;j<=i;j++)
    {
        if(a[j]!=0)
        {
        sum+=pow(k,j);
        }
        else{
            continue;
        }
        
    }

    printf("%ld",sum);

}

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值