• UVA 10994 Simple Addition


    UVA_10994

        这个题目一开始WA了几次,抱着侥幸的心理把几个感觉可以是int的也改成了long long int了,没想到AC了,后来发现可能是一个乘法的细节溢出了,以后一定得多注意这类的问题,避免中间结果溢出。

        下面说这个题目的思路吧,其实对于个位1-9都是一样的,只不过10的倍数变化比较大,于是我们不妨先算完个位不为0的,然后把区间除以10,这样新区间里面剩下的就都是10的倍数了,然后再不断重复前面的操作就可得到最后的结果,注意最后区间长度小于10的时候就直接把他们的和算出来就可以了。

    #include<stdio.h>
    #include<string.h>
    long long int P, Q, res;
    long long int F(long long int n)
    {
    if(n == 0)
    return 0;
    if(n % 10)
    return n % 10;
    return F(n / 10);
    }
    void dfs(long long int x, long long int y)
    {
    long long int i;
    if(y - x < 10)
    {
    for(i = x; i <= y; i ++)
    res += F(i);
    return ;
    }
    for(; x % 10; x ++)
    res += F(x);
    for(; y % 10; y --)
    res += F(y);
    res += 45 * ((y - x) / 10);
    dfs(x / 10, y / 10);
    }
    void solve()
    {
    res = 0;
    dfs(P, Q);
    printf("%lld\n", res);
    }
    int main()
    {
    for(;;)
    {
    scanf("%lld%lld", &P, &Q);
    if(P == -1 && Q == -1)
    break;
    solve();
    }
    return 0;
    }


  • 相关阅读:
    Day9
    Day9
    Day9
    洛谷 P1896 [SCOI2005]互不侵犯
    洛谷 P1879 [USACO06NOV]玉米田Corn Fields
    Day9
    最大m段子段和 Day9
    jsp内置对象-application对象
    jsp内置对象-session对象
    jsp内置对象-response对象
  • 原文地址:https://www.cnblogs.com/staginner/p/2294028.html
Copyright © 2020-2023  润新知