SPOJ Digit Sum

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <map>
  5. #include <string>
  6. #include <vector>
  7. #include <cmath>
  8. #include <cctype>
  9. #include <sstream>
  10. #include <set>
  11. #include <list>
  12. #include <stack>
  13. #include <queue>
  14. #include <algorithm>
  15. #define sf scanf
  16. #define pf printf
  17. #define sfint scanf ("%d %d",&a,&b)
  18. #define sfl scanf ("%ld %ld",&a,&b)
  19. #define sfll scanf ("%lld %lld",&a,&b)
  20. #define sfd scanf ("%lf %lf",&a,&b)
  21. #define sff scanf ("%f %f",&a,&b)
  22. #define loop(i,n) for(i=0;i<n;i++)
  23. #define LL long long
  24. #define L long
  25. #define nl puts("")
  26. #define MX 1000005
  27. #define N 100
  28. #define MOD 10000000007
  29. #define pb push_back
  30. #define pi acos(-1.0)
  31. #define sz size()
  32. #define gc getchar ()
  33. #define ps push
  34. #define clr clear
  35. #define bn begin()
  36. #define ed end()
  37.  
  38. using namespace std;
  39.  
  40. /*int sumofDigit(int N)
  41. {
  42. if(N<10)
  43. return N*(N+1)/2;
  44. int n=N,i;
  45. while(n/10!=0)
  46. {
  47. i++;
  48. n/=10;
  49. }
  50. int p=pow(10,i);
  51. return ((n*i*45*p/10)+(n*(n-1)*p/2)+n*(N%p+1)+sumofDigit(N%p));
  52. }*/
  53.  
  54. LL digit(LL n)
  55. {
  56. if (n<10) return n*(n+1)/2;
  57.  
  58. LL take=n,i=0;
  59. while(n/10 != 0)
  60. {
  61. i++;
  62. n/=10;
  63. }
  64.  
  65. LL p=pow(10,i);
  66. return ((n*i*45*p/10) + (n*(n-1)*p/2) + n*(take%p+1) + digit(take%p));
  67. }
  68. int main()
  69. {
  70. LL x,y,t; cin >> t;
  71. while(t--)
  72. {
  73. cin >> x >> y;
  74. cout << digit(y) - digit(x-1); nl;
  75. }
  76.  
  77. return 0;
  78. }

Comments

Popular posts from this blog

SPOJ-CMG - Collecting Mango

LightOJ 1009 - Back to Underworld

LeetCode Palindrome Number