|
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;
}

|