HDU 4722 WA求大神指教(已经更正)

本文提供了一段C++代码,用于解决一个特定的数列问题。该问题旨在找出一系列整数中,其各位数字之和能被10整除的数量。通过分析规律并采用高效算法,文章给出了详细的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

           规律很容易发现,从10开始,每10个数,有一个满足条件。即19,28,37,46,55,64,73,82,91,109,118,127,136,145,154,163,,,,,,,

          代码如下:

#include<cstdio>
#include<iostream>
#include<cstring>
#define LL long long
using namespace std;
int main()
{
//  freopen("in.txt","r",stdin);
    int t;
    LL num1,num2;
    scanf("%d",&t);
    for(int cas=1; cas<=t; cas++)
    {
        scanf("%I64d%I64d",&num1,&num2);
        LL  cnt=0;
//        if(num1<19)
//            num1=18;
//        if(num2<19)
//            num2=18;//我的代码就错在了这4行语句上,因为19之前的数没有满足条件的,所以直接把19以下的扩大到了18,不知道为何WA了。去掉这四行,就AC了。
        LL l=num1,r=num2;
        while(l%10!=0)
            l++;
        while(r%10!=0)
            r--;
        if(r<=l)
        {
            for(LL i=num1; i<=num2; i++)
            {
                LL  x=i;
                LL ans=0;
                while(x)
                {
                    ans+=x%10;
                    x/=10;
                }
                if(ans%10==0)
                    cnt++;
            }
        }
        else
        {
            for(LL i=num1; i<l; i++)
            {
                LL  x=i;
                LL  ans=0;
                while(x)
                {
                    ans+=x%10;
                    x/=10;
                }
                if(ans%10==0)
                {
                    cnt++;
                    break;
                }
            }
            for(LL i=num2; i>=r; i--)
            {
                LL x=i;
                LL ans=0;
                while(x)
                {
                    ans+=x%10;
                    x/=10;
                }
                if(ans%10==0)
                {
                    cnt++;
                    break;
                }
            }
            cnt+=(r-l)/10;
        }
        printf("Case #%d: %I64d\n",cas,cnt);
    }
    return 0;
}


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值