标题:区间l到r内有多少数是w的幂次 求找错
只看楼主
Sky_
Rank: 2
等 级:论坛游民
帖 子:38
专家分:10
注 册:2019-12-17
结帖率:100%
 问题点数:0 回复次数:13 
区间l到r内有多少数是w的幂次 求找错
输入
输入包含多组数据。
输入的第一行为一个整数t(1<=t<=1000),代表测试用例的组数。
接下来的t组测试用例按照如下格式给出:
每组数据占一行,第一行有3个正整数l,r,w(1<=l<=r<=1e18,1<=w<=1e9)
输出
对于每一组测试数据,在新的一行中输出所有满足条件的数字,每两个数字中间有一个空格,如果没有满足条件的数字则输出-1。
样例输入
2
1 10 2
2 4 5
样例输出
1 2 4 8
-1
但数据是1 1000000000000000000 1000000000时 答案是错误的 不知道为什么 求大佬解答



搜索更多相关主题的帖子: 一行 输入 数据 输出 区间 
2019-12-29 18:21
吕孟伟
Rank: 8Rank: 8
等 级:贵宾
威 望:27
帖 子:200
专家分:870
注 册:2018-10-4
得分:0 
你不把代码发出来怎么找错呀?

借用一下侯捷的话:勿在浮沙筑高台。
2019-12-29 19:02
Sky_
Rank: 2
等 级:论坛游民
帖 子:38
专家分:10
注 册:2019-12-17
得分:0 
回复 2楼 吕孟伟
我忘了。。。。。
#include<stdio.h>
int main ()
{
    int T;
    scanf("%d",&T);
    while (T--)
    {
        long long l,r,w;
        long long ans=1;
        int flag=0;
        scanf("%lld%lld%lld",&l,&r,&w);
        if(l==1)
            printf("1 ");
        if(w>r) printf("-1");
        else
        {
            for(int i=1; i<r; i++)
            {
                ans*=w;
                if(ans>=l&&ans<=r)
                {
                    printf("%lld ",ans);
                    flag=1;
                }
                else if(ans>r) break;

            }
            if(flag==0) printf("-1");
        }
        printf("\n");
    }
    return 0;
}

2019-12-29 19:24
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:554
专家分:3690
注 册:2019-7-29
得分:0 
这个是输入一组输出一组的,如果想要输入完后一起输出,可以吧输出数据存在数组里,最后一起输出。
程序代码:
#include<stdio.h>
int main ()
{
    int T;
    scanf("%d",&T);
    while (T--)
    {
        long long l,r,w;
        long long ans=1;
        int flag=0;
        scanf("%lld%lld%lld",&l,&r,&w);

        if(w>r)
            printf("-1");
        else
        {
            if(l==1)
                printf("1 ");

            while(1)
            {
                ans*=w;
                if(ans<=r)
                {
                    printf("%lld ",ans);
                    flag=1;
                }
                else
                    break;

            }
        }
        printf("\n");
    }
    return 0;
}

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2019-12-29 19:40
Sky_
Rank: 2
等 级:论坛游民
帖 子:38
专家分:10
注 册:2019-12-17
得分:0 
回复 4楼 纯蓝之刃
提交之后显示输出超限 而且输入1 100000000000000000 1000000000 程序就炸了
2019-12-29 20:01
forever74
Rank: 12Rank: 12Rank: 12
来 自:CC
等 级:贵宾
威 望:49
帖 子:1636
专家分:3940
注 册:2007-12-27
得分:0 
你天真的,
以为总有某次幂超过r还能合法表达,
这就是错误,因为它直接溢出了。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2019-12-29 20:45
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:554
专家分:3690
注 册:2019-7-29
得分:0 
程序代码:
#include<stdio.h>
int main ()
{
    int T;
    scanf("%d",&T);
    while (T--)
    {
        long long l,r,w;
        long long ans=1;
        int flag=0;
        scanf("%lld%lld%lld",&l,&r,&w);

        if(w>r)
            printf("-1");
        else
        {
            if(l==1)
                printf("1 ");

            while(1)
            {
                if(ans<=(r/w+1))
                {
                    ans*=w;
                    printf("%lld ",ans);
                    flag=1;
                }
                else
                    break;
            }
        }
        printf("\n");
    }
    return 0;
}

那就改成这样试试

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2019-12-29 21:22
Sky_
Rank: 2
等 级:论坛游民
帖 子:38
专家分:10
注 册:2019-12-17
得分:0 
多谢大佬
样例是没问题了 但改了好几遍一直是输出超限 不知道该咋办了
输出超限是什么原因呐
2019-12-30 09:06
forever74
Rank: 12Rank: 12Rank: 12
来 自:CC
等 级:贵宾
威 望:49
帖 子:1636
专家分:3940
注 册:2007-12-27
得分:0 
看你的输出模式,也许是最右边多余一个空格造成的

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2019-12-30 11:53
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
得分:0 
每组数据占一行,第一行有3个正整数l,r,w(1<=l<=r<=1e18,1<=w<=1e9)
先说一下,你的程序整体是对的,楼主也很聪明的用了l r w 的规定范围测试
longlong的范围是一个十九位的,那么楼主何不改个20范围的类型?比如unsigned longlong
#include<stdio.h>
int main ()
{
    int T;
    scanf("%d",&T);
    while (T--)
    {
        unsigned long long l,r,w;
       unsigned long long ans=1;
        int flag=0;
        scanf("%lld%lld%lld",&l,&r,&w);
        if(l==1)
            printf("1 ");
        if(w>r) printf("-1");
        else
        {
            for(int i=1; i<r; i++)
            {
                ans*=w;
                if(ans>=l&&ans<=r)
                {
                    printf("%lld ",ans);
                    flag=1;
                }
                else if(ans>r) break;

            }
            if(flag==0) printf("-1");
        }
        printf("\n");
    }
    return 0;
}
//楼主在试一试,看是否可以,我是通过C++大版主身上总结了 unsigned这个

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2019-12-31 17:26



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-498711-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.278554 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved