| ||||||||||
| 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 | |||||||||
Re:1001OLEIn Reply To:1001OLE Posted by:ZaakDov at 2008-12-09 21:51:09 Code*
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//#include <time.h>
int calc(int[],int,int[]);
void _print(int [],int,int);
int main(){
char a[6];
//time_t t1,t2;
int n,i,t,j,b[125]={0},c[5],s;
while(1){
for(i=0;i<=124;i++)
b[i]=0;
scanf("%s",a);
scanf("%d",&n);
// t1=time(NULL);
for(i=0;i<=5;i++){
if(a[i]=='.'){
t=i;
}
}
j=0;
for(i=0;i<=5;i++){
if(i!=t){
//b[] need initialize
b[120+j]=a[i]-48;
c[j]=a[i]-48;
j++;
}
}
//, 对于0
for(i=120;i<=124;i++){
if(b[i]!=0){
s=i;
break;
}
}
for(i=2;i<=n;i++){
s=calc(b,s,c);
}
/*Debug
for(i=0;i<=124;i++)
printf("%d ",b[i]);
printf("\n"); */
_print(b,t,n);
// t2=time(NULL);
// printf("%f",difftime(t2,t1));
}
}
int calc(int b[],int start,int c[]){
int e[6],i,j,d[125]={0},v,deb;
for(i=124;i>=start;i--){
e[0]=0;//init e[j]=0
e[5]=0;
for(j=4;j>=0;j--){
e[j+1]+=b[i]*c[j]%10;
e[j]=b[i]*c[j]/10;
if(e[j+1]>=10){
e[j+1]-=10;
e[j]+=1;
}
}
for(j=5;j>=0;j--){
d[i-5+j]+=e[j];
if(d[i-5+j]>9){
d[i-5+j]-=10;
d[i-6+j]+=1;
}
}
}
v=-1;
for(i=start-5;i<=124;i++){
if(d[i]!=0&&v==-1){
v=i;
}
b[i]=d[i];
}
return v;
}
void _print(int b[],int t,int n){
char f[126];
int k,i,u=-1,w;
k=125;
for(i=124;i>=0;i--){
f[k]=b[i]+48;
if(f[k]!='0'&&u==-1){
u=k;
}
k--;
if(125-k==n*(5-t)){
f[k]='.';
k--;
if(u==-1)
u=k;
}
}
w=0;
for(i=0;i<=u;i++)
if(f[i]!='0'||w==1){
printf("%c",f[i]);
w=1;
}
printf("\n");
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator