大头壳

大头大头 下雨不愁 人家有伞 我有大头
posts - 1, comments - 6, trackbacks - 0, articles - 22
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

1001@poj

Posted on 2008-03-28 10:07 王大头 阅读(127) 评论(0)  编辑 收藏 引用
#include <stdio.h>
#
include <stdlib.h>
#
include <string.h>
 
#define OFF     200
#
define BS      20
 
int
main(void)
{
        char    buf[BS];
        int     n
=0;
        int     s[OFF
*2],d[OFF*2],ta[OFF*2];
        memset(buf
,0,sizeof(buf));
        
while(scanf("%s %d",buf,&n)!=EOF) {
                init_array(s
,d,ta,buf);
                deal_array(s
,d,ta,n);
                print_array(d);
                memset(buf
,0,sizeof(buf));
                n
=0;
        }
        
return 0;
}
 
int
init_array(int arr1[OFF
*2],int arr2[OFF*2],int arr3[OFF*2],char s[BS])
{
        int     i
=0,j=0,k=0;
        char    
*tmp_idx,*dot_pos;
        char    tmp[BS]
,tmp_c[2];
        memset(tmp
,0,sizeof(tmp));
        
sprintf(tmp,"%-8.6f",atof(s));
        tmp_idx
=tmp;
        dot_pos
=strchr(tmp,'.');
        
for(i=0;i<OFF*2;i++) {
                arr1[i]
=0;
                arr2[i]
=0;
                arr3[i]
=0;
        }
        
while(*tmp_idx) {
                memset(tmp_c
,0,sizeof(tmp_c));
                strncpy(tmp_c
,tmp_idx,1);
                
if(tmp_idx!=dot_pos) {
                        k
=OFF-(tmp_idx-dot_pos+1)+j;
                        arr1[k]
=atoi(tmp_c);
                        arr2[k]
=atoi(tmp_c);
                        arr3[k]
=atoi(tmp_c);
                }
                
else {
                        j
++;
                }
                tmp_idx
++;
        }
        
return 0;
}
 
int
deal_array(
const int s[OFF*2],int d[OFF*2],int ta[OFF*2],const int n)
{
        int     i
,j,p;
        int     value
,level;
        
for(p=1;p<n;p++) {
                
for(i=0;i<OFF*2;ta[i]=d[i],d[i]=0,i++);
                
for(i=0;i<OFF*2;i++) {
                        
if(s[i]==0) {
                                
continue;
                        }
                        
for(j=0;j<OFF*2;j++) {
                        
if(ta[j]>0) {
                                        value
=s[i]*ta[j];
                                        level
=(i-OFF)+(j-OFF);
                                        update_array(d
,value,level);
                                }
                        }
                }
        }
        
return 0;
}
 
int
update_array(int da[OFF
*2],int v,int level)
{
        int     bal;
        bal
=v+da[OFF+level];
        
if(bal<10) {
                da[OFF
+level]=bal;
        }
        
else {
                da[OFF
+level]=bal%10;
                bal
=bal/10;
                level
++;
                update_array(da
,bal,level);
        }
        
return 0;
}
 
int
print_array(int parr[OFF
*2])
{
        int     p;
        int     i_can
=0,d_can=0;
        int     i_p
=0;
        char    i_str[OFF]
,d_str[OFF],tmp[2];
        memset(i_str
,0,sizeof(i_str));
        memset(d_str
,0,sizeof(d_str));
        memset(tmp
,0,sizeof(tmp));
        
for(p=OFF*2-1;p>=OFF;p--) {
                
if(parr[p]>0)
                        i_can
=1;
                
if(i_can==1) {
                        
sprintf(tmp,"%d",parr[p]);
                        strncpy(
&i_str[i_p],tmp,1);
                        i_p
++;
                }
                memset(tmp
,0,sizeof(tmp));
        }
        
for(p=0;p<OFF;p++) {
                
if(parr[p]>0)
                        d_can
=1;
                
if(d_can==1) {
                        
sprintf(tmp,"%d",parr[p]);
                        strncpy(
&d_str[OFF-p-1],tmp,1);
                }
        }
        
if(strlen(d_str)>0 && strlen(i_str)>0) {
                
printf("%s.%s\n",i_str,d_str);
        }
        
else if(strlen(d_str)>0) {
                
printf(".%s\n",d_str);
        }
        
else if(strlen(i_str)>0) {
                
printf("%s\n",i_str);
        }
        
else {
                
printf("0\n");
        }
        
return 0;
}