zoukankan      html  css  js  c++  java
  • poj 1001

    http://poj.org/problem?id=1001

    这是一道高精度的运算,如果你之前有写过那种高精度的乘法的题目的话,做这个也还是比较简单的。、

    思路:我是首先把小数点的位置确定下来,然后其他的数字不分一起运算,最后在添加小数点。

     1 #include <stdio.h>
     2 #include <iostream>
     3 #include <string.h>
     4 
     5 int nu[200],num[6];
     6 char inp[10];
     7 int n,loc;
     8 
     9 int nc()        //这一个就是高精度的乘法的算法用的。
    10 {
    11     int tmp[200]={0};
    12     for(int i=0;i<200;i++)
    13         for(int m=0;m<=5;m++)
    14         {
    15             tmp[m+i]+=nu[i]*num[m];
    16         }
    17     for(int i=0;i<200;i++)
    18     {
    19         if(tmp[i]>=100){
    20             tmp[i+2]+=tmp[i]/100;
    21             tmp[i+1]+=(tmp[i]-(tmp[i]/100)*100)/10;
    22             tmp[i]=tmp[i]%10;
    23         }
    24         else if(tmp[i]>=10){
    25             tmp[i+1]+=tmp[i]/10;
    26             tmp[i]=tmp[i]%10;
    27         }
    28         nu[i]=tmp[i];
    29     }
    30     return 0;
    31 }
    32 
    33 int main()
    34 {
    35  //   freopen("in.txt","r",stdin);
    36     while(scanf("%s%d",inp,&n)!=EOF)
    37     {
    38         memset(nu,0,sizeof(nu));
    39         int i,m;
    40         for(i=0;inp[i]!='.';i++);           //找出小数点的位置。
    41         loc=(5-i)*n;
    42         for(i=5,m=0;i>=0;i--,m++)
    43         {
    44             if(inp[i]=='.') m--;
    45             else {
    46                 num[m]=inp[i]-'0';
    47                 nu[m]=inp[i]-'0';
    48             }
    49         }
    53         for(i=1;i<n;i++)
    54             nc();
    55         int mark=0,flog=0;
    56         for(int i=0;i<=199;i++)       //用来除去后导0的。
    57         {
    58             if(i==loc){
    59                 mark=i;
    60                 flog=1;
    61                 break;
    62             }if(nu[i]!=0){
    63                 mark=i;
    64                 break;
    65             }
    66         }
    67      //   printf("%d
    ",mark);
    68         for(i=199,m=199;i>=mark;i--,m--)
    69         {
    70             if(nu[i]!=0&&i==m) m--;
    71             if(i!=m) printf("%d",nu[i]);
    72             if(i==loc||(loc>i&&i==m))
    73             {
    74                 if(!flog) printf(".");
    75                 m--;
    76             }
    77         }
    78         printf("
    ");
    79     }
    80     return 0;
    81 }
  • 相关阅读:
    python正则表达式(+ {})(二)
    14丨 HTTP有哪些优点?又有哪些缺点?
    python正则表达式(. *)(一)
    12丨响应状态码该怎么用?
    Fiddler—Fiddler+willow插件应用(十四)
    11丨你能写出正确的网址吗?
    【洛谷P1858】多人背包
    【洛谷P3387】(模板)缩点
    【洛谷P2184】贪婪大陆
    Leetcode: 39. Combination Sum
  • 原文地址:https://www.cnblogs.com/Tree-dream/p/5703384.html
Copyright © 2011-2022 走看看