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这道题的提醒都注意到了,但是提交还是报WA。附代码请教。就是把数字存放按位存到数组里面,按位乘。 #include <stdio.h> #include <stdlib.h> #define ARR_OFFSET 400 #define BUF_SIZE 20 #define CHECK_ARG int main(void) { char buf[BUF_SIZE]; int n; int src_arr[ARR_OFFSET*2],dst_arr[ARR_OFFSET*2],tmp_arr[ARR_OFFSET*2]; int debug_i; float ff; memset(buf,0,sizeof(buf)); while(scanf("%s %d",buf,&n)!=EOF) { if(n==1) { #ifdef CHECK_ARG ff=atof(buf); if(ff>99.999001 || ff<=0.0000000001 || n<0 || n>25) { ff=0; n=0; continue; } #endif printf("%s\n",buf); } else { #ifdef CHECK_ARG ff=atof(buf); if(ff>99.999001 || ff<=0.0000000001 || n<0 || n>25) { ff=0; n=0; continue; } #endif init_array(src_arr,dst_arr,tmp_arr,buf); deal_array(src_arr,dst_arr,tmp_arr,n); print_array(dst_arr); } memset(buf,0,sizeof(buf)); n=0; ff=0; } return 0; } int init_array(int arr1[ARR_OFFSET*2],int arr2[ARR_OFFSET*2],int arr3[ARR_OFFSET*2],char s[BUF_SIZE]) { int i,j=0,k; char *tmp_idx,*dot_pos; char tmp[BUF_SIZE],tmp_c[2]; memset(tmp,0,sizeof(tmp)); sprintf(tmp,"%f",atof(s)); tmp_idx=tmp; dot_pos=strchr(tmp,'.'); for(i=0;i<ARR_OFFSET*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=ARR_OFFSET-(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 src_arr[ARR_OFFSET*2],int dst_arr[ARR_OFFSET*2],int tmp_arr[ARR_OFFSET*2],const int n) { int i,j,p; int value,level; for(p=1;p<n;p++) { for(i=0;i<ARR_OFFSET*2;tmp_arr[i]=dst_arr[i],dst_arr[i]=0,i++); for(i=0;i<ARR_OFFSET*2;i++) { if(src_arr[i]==0) { continue; } for(j=0;j<ARR_OFFSET*2;j++) { if(tmp_arr[j]>0) { value=src_arr[i]*tmp_arr[j]; level=(i-ARR_OFFSET)+(j-ARR_OFFSET); update_array(dst_arr,value,level); } } } } return 0; } int update_array(int da[ARR_OFFSET*2],int v,int level) { int bal; bal=v+da[ARR_OFFSET+level]; if(bal<10) { da[ARR_OFFSET+level]=bal; } else { da[ARR_OFFSET+level]=bal%10; bal=bal/10; level++; update_array(da,bal,level); } return 0; } int print_array(int parr[ARR_OFFSET*2]) { int p; int i_can,d_can; int i_p=0; char i_str[ARR_OFFSET],d_str[ARR_OFFSET],tmp[1]; memset(i_str,0,sizeof(i_str)); memset(d_str,0,sizeof(d_str)); memset(tmp,0,sizeof(tmp)); for(p=ARR_OFFSET*2-1;p>=ARR_OFFSET;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++; } } for(p=0;p<ARR_OFFSET;p++) { if(parr[p]>0) d_can=1; if(d_can==1) { sprintf(tmp,"%d",parr[p]); strncpy(&d_str[ARR_OFFSET-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; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator