传送门 太菜了!一直不敢开二维数组打表,笨啊!!
题意:给出一个整数N和进制b,让你分解对应整数进制的每一位,使之相加,求前N个数的每个数对应的进制相加的和。
思路;按题意模拟。注意数据需要打表,不然超时。
题解代码:
//#define N 100010
using namespace std;
const ll maxn = 1e6 + 5;
const ll minn = 1e9 + 5;
const ll mod = 1000000007;
//ll a[maxn], b[maxn];
//bool vis[maxn];
int ans[maxn];
vector<int>v[maxn];
bool row[maxn], col[maxn];
//bool vis[maxn][maxn][2];
bool flag = 0;
int sum[maxn][10];
int bit(int x, int zj) {
int t;
int Sum = sum[x-1][zj];
while(x) {
t = x % zj;
Sum += t;
x = x / zj;
}
return Sum;
}
int main() {
int N, b, T;
cin >> T;
int cnt = 0;
for(int i = 2; i <= 10; i++)
for(int j = 1; j <= 1000000; j++)
sum[j][i] = bit(j, i);//打表,开二维数组存。
while(T--) {
ll ans = 0;
cin >> N >> b;
printf("Case #%d: ", ++cnt);
printf("%d\n",sum[N][b]);
}
return 0;
}