রবিবার, ২৬ মার্চ, ২০১৭

Compute sum of digits in all numbers from 1 to n


Sum of digits of a range(suppose 1-10 ans is 46,1-9 ans is 45)

#include<stdio.h>
#include<algorithm>
#include<iostream>
using namespace std;
long long  b,i,x,v,c,ans,anc,b1;
int j,k,a[20];
main()
{
    while(cin>>b>>b1)
    {
        if(b==-1&&b1==-1)
            break;
        ans=0;
        anc=0;
        k=0;
        x=1;
        j=0;
        while(b!=0)
        {
            a[k]=b%10;
            b/=10;
            k++;
        }
        for (i=1; i<k; i++) x*=10;
        if (k==0) x=0;
        k--;
        while(x!=0)
        {
            v=45*(x/10)*k;
            c=(a[k]*(a[k]-1)/2)*x+v*a[k]+a[k];
            ans+=j*a[k]*x+c;
            j+=a[k];
            x/=10;
            k--;

        }
        ans-=j;
        k=0;
        x=1;
        j=0;
        while(b1!=0)
        {
            a[k]=b1%10;
            b1/=10;
            k++;
        }
        for (i=1; i<k; i++) x*=10;
        k--;
        while(x!=0)
        {
            v=45*(x/10)*k;
            c=(a[k]*(a[k]-1)/2)*x+v*a[k]+a[k];
            anc+=j*a[k]*x+c;
            j+=a[k];
            x/=10;
            k--;
        }
        cout<<anc-ans<<endl;
    }
}

কোন মন্তব্য নেই:

একটি মন্তব্য পোস্ট করুন

Factorization with prime Sieve

vector <int> prime; char sieve[1000009]; int N=1000009; void primeSieve ( ) { sieve[0] = sieve[1] = 1; prime.push_back(2); ...