zoukankan      html  css  js  c++  java
  • SPOJ CPCRC1C Sum of Digits

    题目连接

    题意:计算从a到b每个数每位数字相加的和

    code:

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    using namespace std;
    typedef unsigned long long ll;
    ll cnt[16];                                       //cnt[i]表示0 到 最大n位数的个位数的和 
    ll s[16];                                         //s[i]表示10的i次方   
    ll num[17];
    ll cop[17];
    void init(){
        ll base = 10;
        cnt[0] = 0;
        cnt[1] = 45;
        for(ll i = 2;i <= 16;i ++){
            cnt[i] = cnt[1] * base * i;
            base *= 10; 
        } 
        s[0] = 1;
        s[1] = 10;
        for(int i = 2;i <= 16;i ++){
            s[i] = 10 * s[i-1];
        } 
    } 
    ll getSum(ll a){
        ll count = 1;
        while(a){
            cop[count] = a%10;
            a /= 10;
            count ++;
        }
        count --;          //代表位数 
        for(ll i = 1;i <= count;i ++){
            num[i] = cop[count-i+1];
        }
        ll Sum = 0;
        ll ss = 0;
        for(ll i = 1;i <= count;i ++){
            Sum += (num[i])*cnt[count-i];
            for(ll j = 0;j < num[i];j ++){
                Sum += (ss + j)*s[count-i];
            }
            ss += num[i];
        }
        for(ll i = 1;i <= count;i ++) Sum += num[i]; 
        return Sum;
    }
    int main(void){
        init();
        ll cas;
        ll a,b;
        cin >> cas;
        while(cas --){
            cin >> a >> b;
            if(a == 0) a = 1;
            ll aa,bb;
            bb = getSum(b);
            aa = getSum(a-1);
            cout << bb - aa<< endl;
        }
        return 0;
    }
    View Code
  • 相关阅读:
    LRU算法实现 最近最久未使用
    快速排序
    redis 常用命令
    实例:接口并发限流RateLimiter
    Hadoop伪分布式安装
    ssl免密登录(centos6)
    Linux下安装jdk-7u67-linux-x64.rpm
    Mosquitto安装和使用
    MQTT linux centOS7 部署
    CentOS更换yum源
  • 原文地址:https://www.cnblogs.com/zhangjialu2015/p/5697119.html
Copyright © 2011-2022 走看看