小号@ikunyyh
代码思路:首先找到规律,易有:
Eg:3793+37+379+7+79+9⇓3+30+7+300+70+9+7+70+9+9⇓333+77⋅2+9⋅3⇓333⋅1+77⋅2+9⋅3⇓3⋅102+(3+7⋅2)⋅101+(3+7⋅2+9⋅3)⋅100514==========================================Eg:1145141+11+114+1145+11451+114514+1+14+145+1451+14514+4+45+451+4514+5+51+514+1+14+4⇓111111+11111⋅2+4444⋅3+555⋅4+11⋅5+4⋅6⇓111111⋅1+11111⋅2+4444⋅3+555⋅4+11⋅5+4⋅6⇓(1⋅1)⋅105+(1⋅1+1⋅2)⋅104+(1⋅1+1⋅2+4⋅3)⋅103+(1⋅1+1⋅2+4⋅3+5⋅4)⋅102+(1⋅1+1⋅2+4⋅3+5⋅4+1⋅5)⋅101+(1⋅1+1⋅2+4⋅3+5⋅4+1⋅5+4⋅6)⋅100最后加个高精度,进位一下即可
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 1e7+7;
int N;
int a[maxn];
int ans[maxn];
inline void print (int *b) {
for (register int i = b[0]; i >= 1; i--)
cout << b[i];
cout << endl;
return;
}
inline void get (void) {
ans[0] = N;
for (register int i = 1; i <= ans[0]; i++) {
ans[i + 1] += ans[i] / 10;
ans[i] %= 10;
}
return;
}
signed main(signed argc, char const *argv[]) {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
char m;
int k = 0;
cin >> N;
for (register int i = 1; i <= N; i++) {
cin >> m;
a[i] = m - 48;
}
int prefix = 0;
for (register int i = 1; i <= N; i++) {
prefix += i * a[i];
ans[N-i+1] = prefix;
}
get();
print(ans);
return 0;
}