Given a number x, find sum of digits in all numbers from 1 to n.
Solutiontake 389 for example;
count[1,299) + [300,389)'s 3 + [1,89)
Code
#include <stdio.h>
#include <iostream>
#include <cmath>
using namespace std;
int f(int n) {
if (n < 10) {
return n * (n + 1) / 2;
}
int d = log10(n);
int a[15];
a[1] = 45;
for (int i = 2;i <= d;i ++) {
a[i] = a[i - 1] * 10 + 45 * pow(10,i - 1);
}
int p = ceil(pow(10,d));
int msd = n / p;
int p1 = msd * a[d] + (msd * (msd - 1)) / 2 * p;
//int p1 = f(msd * p - 1);
int p2 = msd * (n % p + 1) + f(n % p);
return p1 + p2;
}
int main() {
//code
cout << f(389) << endl;
return 0;
}
没有评论:
发表评论