zoukankan      html  css  js  c++  java
  • 关于大数加法的解法

    1.字符串结题(不会超内存,但是代码较长)

    http://acm.hdu.edu.cn/showproblem.php?pid=1250

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <vector>
     4 #include <algorithm>
     5 #include <cmath>
     6 #include <string.h>
     7 #include <malloc.h>
     8 using namespace std;
     9 void add(char *a,char *b,char *c)
    10 {
    11     int i,j,k,t,lmax,lmin,tmp;
    12     char *s,*pmax,*pmin;
    13     lmax=strlen(a);
    14     lmin=strlen(b);
    15     if(lmax<lmin)
    16     {
    17         tmp=lmax;lmax=lmin;lmin=tmp;
    18         pmax=b;pmin=a;
    19     }
    20     else
    21     {
    22         pmax=a;pmin=b;
    23     }
    24     s=(char*)malloc(sizeof(char)*(lmax+1));
    25     s[0]='0';//注意此处很容易被忽略
    26     for(i=lmax-1,j=lmin-1,k=lmax;j>=0;i--,j--,k--)
    27         s[k]=pmax[i]-'0'+pmin[j];
    28     for(;i>=0;i--,k--)
    29     s[k]=pmax[i];
    30     for(i=lmax;i>=0;i--)
    31     if(s[i]>'9')
    32     {
    33         s[i]-=10;
    34         s[i-1]++;
    35     }
    36     if(s[0]=='0')
    37     {
    38         for(i=0;i<=lmax;i++)
    39         c[i-1]=s[i];
    40         c[i-1]='';
    41     }
    42     else
    43     {
    44         for(i=0;i<=lmax;i++)
    45         c[i]=s[i];
    46         c[i]='';
    47     }
    48     free(s);
    49 }
    50 char dp[8001][2301];
    51 int main(void)
    52 {
    53     for(int i=1;i<=4;i++)
    54     strcpy(dp[i],"1");
    55     for(int i=5;i<8000;i++)
    56     {
    57         char a[2301],b[2301];
    58         add(dp[i-1],dp[i-2],a);
    59         add(dp[i-3],dp[i-4],b);
    60         add(a,b,dp[i]);
    61     }
    62     int n;
    63     while(cin>>n)
    64     {
    65         cout<<dp[n]<<endl;
    66     }
    67     return 0;
    68 }
    View Code

    2.int型数组(容易超内存,代码比较简便)

    http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19702

     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <string.h>
     4 #include <algorithm>
     5 using namespace std;
     6 int dp[100][51];
     7 int main()
     8 {
     9     int len,a,b,c,k,t,sum;
    10     while(cin>>a>>b>>c)
    11     {
    12         len=0;k=50;
    13         memset(dp,0,sizeof(dp));
    14         while(a)
    15         {
    16             dp[0][k--]=a%10;
    17             a/=10;
    18         }
    19         if(len<50-k)
    20         len=50-k;
    21         k=50;
    22         while(b)
    23         {
    24             dp[1][k--]=b%10;
    25             b/=10;
    26         }
    27         if(len<50-k)
    28         len=50-k;
    29         k=50;
    30         while(c)
    31         {
    32             dp[2][k--]=c%10;
    33             c/=10;
    34         }
    35         if(len<50-k)
    36         len=50-k;
    37         for(int i=3;i<100;i++)
    38         {
    39             sum=0;
    40             for(int k=50;k>50-len;k--)
    41             {
    42                 sum=sum+dp[i-1][k]+dp[i-2][k]+dp[i-3][k];
    43                 dp[i][k]=sum%10;
    44                 sum/=10;
    45                 while(k==50-len+1&&sum>0)
    46                 {
    47                     dp[i][50-len]=sum;
    48                     len++;
    49                     break;
    50                 }
    51             }
    52         }
    53         for(t=0;t<50;t++)
    54         if(dp[99][t]!=0)
    55         break;
    56         for(;t<=50;t++)
    57         cout<<dp[99][t];
    58         cout<<endl;
    59     }
    60     return 0;
    61 }
    View Code
  • 相关阅读:
    UVA 10600 ACM Contest and Blackout(次小生成树)
    UVA 10369
    UVA Live 6437 Power Plant 最小生成树
    UVA 1151 Buy or Build MST(最小生成树)
    UVA 1395 Slim Span 最小生成树
    POJ 1679 The Unique MST 次小生成树
    POJ 1789 Truck History 最小生成树
    POJ 1258 Agri-Net 最小生成树
    ubuntu 用法
    ubuntu 搭建ftp服务器,可以通过浏览器访问,filezilla上传文件等功能
  • 原文地址:https://www.cnblogs.com/wang-ya-wei/p/5663841.html
Copyright © 2011-2022 走看看