| ||||||||||
| 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 | |||||||||
求高手指点,1001,实在找不出问题,总得到wrong answer!刚开始做题,1001的Exponentiation,我写完实在找不出问题了,但提交总是wrong answer,请高手指点,非常感谢!
代码入下:=================================
#include <iostream>
#include <string.h>
using namespace std;
static const int COLS = 6; //max r's colums
static const int MAX = 151; //6*25+1
int get_base(char r[], int *k){
int length = strlen(r);
int k_pos = -1;
int base = 0;
//a to i
for(int i=0; i<length; i++){
if(r[i] == '.'){
k_pos = i;
continue;
}
base = base * 10 + (r[i] - '0');
}
*k = k_pos > 0 ? (length-1-k_pos) : 0;
return base;
}
//caculate power by big multiply
void power(int base, int n, int result[]){
//init result
for(int i=0; i<MAX; i++) result[i] = 0;
//digital base
int i = MAX - 1;
int tmp = base;
while(tmp != 0){
result[i--] = tmp % 10;
tmp /= 10;
}
//power caculation(attention, n-1 bug not n)
for(int i=0; i<n-1; i++){
int set = 0; //jinwei!
//result[j] == 0也必须继续,因为可能还有进位
for(int j=MAX-1; j>=0; j--){
if(result[j] == 0 && set == 0) continue;
result[j] = result[j] * base + set;
//jinwei! use in next loop
set = result[j] / 10;
result[j] = result[j] % 10;
}
}
}
void print(int result[], int k){
int start=0, end=0;
int zeros = 0; //prefix zeros
//start
for(int i=0; i<MAX; i++){
if(result[i] != 0){start = i; break;}
}
if(k == 0){
end = MAX-1;
}else{
//end
for(int j=MAX-1; j>=0; j--){
if(result[j] != 0){end = j; break;}
}
if(k > (MAX-1-start+1)) zeros = k - (MAX-1-start+1);
}
//print
//cout << "start, end, zeros=" << start << ", "<< end << ", " << zeros << endl;
if(k == 0){ //xxxx
for(int i=start; i<=end; i++) cout << result[i];
}else{
if(zeros > 0){ //.000xxx
cout << ".";
for(int i=0; i<zeros; i++) cout << "0";
for(int i=start; i<=end; i++) cout << result[i];
}else{ //x.xxx
for(int i=start; i<start+(MAX-1-start+1-k); i++) cout << result[i];
cout << ".";
for(int i=start+(MAX-1-start+1-k); i<=end; i++) cout << result[i];
}
}
cout << endl;
}
void run(){
char r[COLS];
int n;
int result[MAX];
while(cin >> r >> n){
int int_base; //基数的int值
int k; //小数位数
int_base = get_base(r, &k);
power(int_base, n, result);
print(result, k*n);
}
}
int main(int argc, char *argv[]){
run();
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator