| ||||||||||
| 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 | |||||||||
大家可以帮忙看看这个问题是怎么回事吗?一直error#include <iostream>
#include <cstring>
using namespace std;
#define SIZE_OF_BUF 512
#define SIZE_OF_R 8
int ctoi(char ch)
{
if (0==ch)
{
return 0;
}
else
{
return ch - 48;
}
}
char * mul(char *buf, char *A, char *B) {
int tmp = 0;
int add = 0;
char * ret = NULL;
int i=0,j=0;
char *p = A;
while(1)
{
if('\0'==*B)
{
break;
}
if('.'==*B)
{
B--;
continue;
}
add = 0;
i=0;
A = p;
while(1)
{
if('.'==*A)
{
A--;
continue;
}
if ('\0' == *A && 0 == add) {
break;
}
tmp = ctoi(*(buf-i-j)) + ctoi(*A) * (*B - 48) + add;
*(buf-i-j) = tmp%10 + 48;
add = tmp / 10;
A--;
i++;
}
ret = buf-i-j+1;
B--;
j++;
}
return ret;
}
char * insert_ch(char *p, char ch, int pos)
{
char buf[SIZE_OF_BUF]={0};
strncpy(buf, p, pos);
strcat(buf,".");
strncpy(p-1,buf,strlen(buf));
return p-1;
}
/*return E*/
int get_E(char *R)
{
for(int i=0; ; i++)
{
if(0==R[i])
{
break;
}
if('.'==R[i])
{
return -(strlen(R)-1-i);
}
}
return 0;
}
char * process_str(char *str, int E)
{
char *p = str+strlen(str)-1;
while(1)
{
if('0'==*p && (p > str+strlen(str)-1-E))
{
*p = 0;
}
else
{
break;
}
p--;
}
while('0'==*str)
{
*str=0;
str++;
}
if('.' == *(str+strlen(str)-1))
{
*(str+strlen(str)-1) = 0;
}
if(strlen(str)==0)
{
*str = '0';
}
return str;
}
char *calc(char *buf_rear, char *R, const int n) {
char *p = NULL;
char tb[SIZE_OF_BUF];
memset( tb, 0, SIZE_OF_BUF);
strcpy( tb, R);
if('.'==*R)
{
R--;
*R = '0';
}
if('.'==*(R+1)&&0==*(R+2))
{
*buf_rear = '0';
return buf_rear;
}
int e=-get_E(R);
int E = e;
if(0==n)
{
*buf_rear = '1';
return buf_rear;
}
if(1==n)
{
strcpy(buf_rear-strlen(R), R);
p = process_str(buf_rear-strlen(R), E);
return p;
}
for(int i=2; ; i++)
{
E = i*e;
p = mul( buf_rear, tb+(strlen(tb)-1), R+(strlen(R)-1));
if(n == i)
{
break;
}
memset( tb, 0, SIZE_OF_BUF);
strcpy(tb, p);
memset( p, 0, strlen(p));
}
if(0!=E)
{
p = insert_ch( p, '.', strlen(p)-E);
}
p = process_str(p, E);
return p;
}
int main() {
char *buf = (char *) malloc(SIZE_OF_BUF);
char *R = (char *) malloc(SIZE_OF_R);
int n = 0;
while ( cin >> R+2 >> n) {
cout << calc(buf + SIZE_OF_BUF - 2, R+2, n);
cout << endl;
memset(buf, 0, SIZE_OF_BUF);
memset(R, 0, SIZE_OF_R);
}
free(R);
free(buf);
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator