随笔-11  评论-1  文章-0  trackbacks-0
时间过得真快,不知不觉已经一周没有更新随笔了。随笔慢慢地将变成随便的一笔吧,千万不要。
最近在实习,我负责的任务主要是后台数据的挖掘,用C#结合ORACLE数据库来实现。代码是现成的,我要做的就是确保得到正确的结果和稳定的运行。经过三天的读代码,写代码,终于初步完成。但由于现在还没开始利用这些数据,所以问题肯定较多,到时候就要一一解决了。
不说这个,昨天看了大整数加法,试着去北大网站上做了一个相似的题,最后终于ACCEPT。
求n个大整数相加
 1#include<stdio.h>
 2#include<string.h>
 3#define MAX_LEN 110
 4int an1[MAX_LEN][MAX_LEN+10];
 5char szLine[MAX_LEN+10];
 6
 7
 8int main()
 9{
10    int i,j,n,nLen;
11    memset(an1,0,sizeof(an1));
12    for(n=0;n<MAX_LEN;n++)
13    {
14        scanf("%s",szLine);
15        if(!strcmp(szLine,"0"))
16            break;
17        nLen=strlen(szLine);
18        j=0;
19        for(i=nLen-1;i>=0;i--)
20            an1[n][j++]=szLine[i]-'0';
21    }

22    for(i=1;i<n;i++)
23        for(j=0;j<MAX_LEN;j++)    
24        {
25            an1[0][j]+=an1[i][j];
26            if(an1[0][j]>=10)
27            {
28                an1[0][j]-=10;
29                an1[0][j+1]++;
30            }

31        }

32    bool bStartOutput=false;
33    for(i=MAX_LEN;i>=0;i--)
34    {
35        if(bStartOutput)
36            printf("%d",an1[0][i]);
37        else if(an1[0][i])
38        {
39            printf("%d",an1[0][i]);
40            bStartOutput=true;
41        }

42
43    }

44    if(!bStartOutput)
45        printf("%d",0);
46    return 0;
47}

48
这题要注意的是,首先,00这样的输入是合法的,所以判断程序结束时,不能单纯的判定第一个字符为‘0’;然后就是00+00输出0,就是结果为0时的输出。
推荐一本书,程序设计导引及在线实践,我现在正在看,也是bbs上别人推荐的,很适合acm或是想研究算法的新手。
posted on 2010-08-13 19:44 douhui 阅读(246) 评论(0)  编辑 收藏 引用 所属分类: 算法初步

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理