POJ1001:高精度乘法(去掉前导后导0,结果是整数不输出小数点)

#include<string.h>

#include<stdio.h>

const int maxn=999999;

char str[10];

int n,dot;

int res[maxn],a[maxn],b[maxn];

int len,lena,lenb;

 

void Mul()

{

   int i,j;   

   memset(res,0,sizeof(res));//初始化结果   

   for(i=1;i<=lena;i++)   

      {      

     for(j=1;j<=lenb;j++)      

      {         

           res[i+j-1]+=a[i]*b[j];//怎么确定结果所在的位置下标?           

      if(res[i+j-1]>9)            

       {              

        res[i+j]+=res[i+j-1]/10;//进位              

        res[i+j-1]%=10;           

       }       

      }    

    }   

   if(res[lena+lenb-1]>9)   

   {     

      res[lena+lenb]+=res[lena+lenb-1]/10;     

      res[lena+lenb-1]%=10;   

    }    

   lena=lena+lenb;   

  for(i=1;i<=lena;i++)     a[i]=res[i];

}

int main()

{  

   int i,j,up,down;//丿up和down是记录什么的  

 while(scanf("%s %d",str,&n)!=EOF)

{   

   dot =-1;//小数点初始化  

 for(i=5,j=1;i>=0;i--) //循环的意思 ?  

 {    

    if(str[i]!='.')  a[j]=b[j++]=str[i]-'0';      

    else

       dot = i;  

  }  

       if(dot==-1) lena = lenb = 6;//即输入为整数  

       else lena = lenb = 5;  

    for ( i=1;i<n;i++) Mul();  

  if ( dot == -1)  

 {

   for(i=lena;i>=1;i--)

    printf("%d",a[i]);

    printf("\n");  

 }

  else

   {

    dot = 5 - dot ;

    dot *= n;

 for (i=1;i<=lena;i++)

 {  

      if(a[i]!=0)  

      {    

          down = i;    

          break;  

       }  

      }

     for (j=lena;j>=1;j--)  

    {   

        if(a[j]!=0)   

        {     

             up = j;     

             break;   

         }  

     }  

   i = up;  

 if(up<dot) i=dot;  

    j=down;  

 if(j>dot) j=dot + 1;  

for(;i>=j;i--)  

{    

     if(i==dot) printf(".");     

    printf("%d",a[i]);  

  }

printf("\n");  

  }

 }

return 0;

}

 

      自己是写不出..高精度(乘法)一直是个坎,还是Poj上去就有的一个坎,所以自己就在这个坑里一直转转停停,刷题也止住了。若不是队友督促,也许自己连分析别人的代码的时间都“没有”吧。写到这里还没有完全懂。等明天看别的题的时候再返回来看几遍这个。说没时间是假的,除了上课、复习数学&&背单词&&看日语&&运动&&偶尔扒扒MOOC,剩下的时间都花在刷淘宝、睡觉和吃饭上了吧。悠悠转转的把时间都浪费掉,然后坦荡的告诉自己没时间,其实还是什么都不会,尤其在编程算法能力上。...倒腾了许多,真的学会什么呢。踏实些。跟着踏实的人好好学。

 

posted @ 2016-09-27 23:36  lttra  阅读(605)  评论(1)    收藏  举报