时间过得真快,不知不觉已经一周没有更新随笔了。随笔慢慢地将变成随便的一笔吧,千万不要。
最近在实习,我负责的任务主要是后台数据的挖掘,用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 阅读(255)
评论(0) 编辑 收藏 引用 所属分类:
算法初步