zoukankan      html  css  js  c++  java
  • 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;
    }


  • 相关阅读:
    jQuery 参考手册
    jQuery 参考手册
    ASP.NET框架例举
    判断checkbox是否选中
    ajax动态添加的li不能绑定click事件
    缓存代码备用
    关于ajax伪实时动态下拉显示最新数据
    JavaScript中,格式化DateTime
    jquery判断id是否存在
    SSI-Server Side Inclued
  • 原文地址:https://www.cnblogs.com/staginner/p/2294028.html
Copyright © 2011-2022 走看看