zoukankan      html  css  js  c++  java
  • hrbust1140 数字和问题

    题目:

    定义一种操作为:已知一个数字,对其各位数字反复求和,直到剩下的数是一位数不能求和为止。
    例如:数字2345,第一次求和得到2 + 3 + 4 + 5 = 14,再对14的各位数字求和得到1 + 4 = 5,得到5将不再求和。
    现在请你求出对ab进行该操作后,最终得到的数字是什么。
     
    数据范围:包含两个数字a(0 <= a <= 2000000000)和b(1 <= b <= 2000000000)

    链接:https://cn.vjudge.net/problem/HRBUST-1140

    分析:

    1.数据太大,但是结果范围是( 0 <= res <= 9 )。

    2.有个结论:数字和公式:abcd % 9 = n % 9。(n = a + b + c + d)。

    简单证明:

    (a + b + c + d) % 9
    = (999a + 99b + 9*c + a + b + c + d) % 9
    = abcd % 9

    3.使用快速幂取余 求 ab%9 。

    4.注意:当a==0时,res=0 。

    代码:

    #include<iostream>
    #include<cstdio>
    using namespace std;
    #define ll long long
    
    ll quickpow(ll a,ll b,ll k)
    {
        ll res=1;
        while(b)
        {
            if(b&1) res=(a*res)%k;
            a=(a*a)%k;
            b>>=1;
        }
        return res;
    }
    
    int main()
    {
        ll a,b,k=9;
        while(cin>>a>>b)
        {
            ll res=quickpow(a,b,k)%k;
            if(a==0) res=0;
            else if(res==0) res=9;
            cout<<res<<endl;
        }
        return 0;
    }
    View Code
  • 相关阅读:
    groovy-搭建环境
    isAssignableFrom
    H5调用摄像头
    php生成唯一id
    剑指Offer刷题日常
    ASCII码对照表
    用redis stream作队列的一些心得
    在 CAP 中使用 AOP ( Castle.DynamicProxy )
    office2019下载
    JVM调优浅谈
  • 原文地址:https://www.cnblogs.com/tristatl/p/7241992.html
Copyright © 2011-2022 走看看