| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
细节,附代码#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 100 + 5;
char a[maxn], s[maxn * 4];
int adder[maxn * 4], buffer[maxn * 4];
int k, n, B, cnt;
void add(){
int p = 0;
for(int i = 0, p_; i < cnt; i++){
p_ = (buffer[i] + adder[i] + p) / B;
buffer[i] = (buffer[i] + adder[i] + p) % B;
p = p_;
}
if(p) { buffer[cnt] = p; cnt++; }
}
void update(){
n = max(cnt, n);
int p = 0;
for(int i = 0, p_; i < n; i++){
p_ = ((s[i] + buffer[i] + p) - '0') / B;
s[i] = ((s[i] + buffer[i] + p) - '0') % B + '0';
p = p_;
}
if(p) s[n++] = p + '0';
}
int main(){
while(~scanf("%d", &B)){
scanf("%s", a);
k = strlen(a);
if(k == 1 && a[k - 1] == '0') { printf("\n"); continue; }
for(int i = 0; i < maxn * 4; i++) s[i] = '0';
memset(adder, 0, sizeof adder);
cnt = n = 0;
for(int i = k - 1; i >= 0; i--){
int j = k - 1 - i, t;
if(!j) { cnt = 1; adder[0] = buffer[0] = 1; }
else{
t = 10;
memcpy(buffer, adder, sizeof buffer);
while(--t) add();
memcpy(adder, buffer, sizeof buffer);
}
t = a[i] - '0';
if(t){
while(--t) add();
update();
}
}
int p = 0;
for(int i = 0; i < n; i++){
int t = s[i] - '0' + p;
s[i] = '0' + (t <= 0 ? B + t : t);
p = t <= 0 ? - 1 : 0;
}
if(s[n-1] == B + '0') n--;
for(int i = n - 1; i >=0; i--) putchar(s[i]);
printf("\n");
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator