posts - 43,  comments - 9,  trackbacks - 0

http://acm.cs.bupt.cn/onlinejudge/showproblem.php?problem_id=1379

给一个长度10MB的大数n,要求计算ceil(n/2),内存只有1000K,显然不能开数组,要边读边除
通常的除法只要设个变量记录每位是否整除(mod).此外题目要求不输出前导0,再设个bool值记录(zero)
特殊之处在于向上取整.举个例子:1999/2=1000,显然直接除一位输出一位有问题
关键之处在于增加一个变量记录连续的9的个数(cnt9).如果处理到非9的位,或者输入文件结束,就分情况输出前面最近一位非9数除的结果,然后循环输出9除的结果.因此,还要一个变量记录上一位除得的商(co)

 1 /*
 2     记录连续9的个数,为了使输入末尾有连续9时向上取整
 3     co记录上位除的商
 4     mod记录上位除的余数
 5     cnt9记录连续的9的个数
 6     zero记录前导是否为0 
 7     当前位不是9时,输出之前的结果,并将当前位+mod*5存入co
 8     当前位是9时,cnt9++
 9     输入结束时,处理末尾几位 
10     注意:
11         输入为0时
12         以9开头时
13         以x9开头时 
14     
15     几组数据: 
16     000319900099 159950050
17     199 100
18     0199 100
19     1998 999
20     99 50
21     0 0
22 */
23 #include <iostream>
24 using namespace std;
25 int main(){
26     bool zero;
27     int mod,cnt9;
28     char co,cn,ct;
29     zero=true; mod=0; co=0; cnt9=0;
30     while(isdigit(cn=getchar())){
31         cn-='0';
32         if(cn!=9){
33             if(!zero||co){
34                 zero=false;
35                 putchar(co+'0');
36             }
37             if(cnt9)zero=false;
38             while(cnt9--){
39                 putchar(4+5*mod+'0');
40                 mod=1;
41             }
42             cnt9=0;
43             co=(cn>>1)+5*mod;
44             mod=cn&1;
45         }
46         else{
47             cnt9++;
48         }
49     }
50     if(!zero||co||mod){
51         zero=false;
52         putchar(co+mod+'0');
53     }
54     mod=1-mod;
55     if(cnt9)zero=false;
56     while(cnt9--){
57         putchar(5*mod+'0');
58         mod=0;
59     }
60     //输入0的情况!
61     if(zero)putchar('0'); 
62     putchar('\n');
63     return 0;
64 }
65 

posted on 2009-03-25 22:52 wolf5x 阅读(260) 评论(0)  编辑 收藏 引用 所属分类: acm_icpc

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


<2009年3月>
22232425262728
1234567
891011121314
15161718192021
22232425262728
2930311234

"Do not spend all your time on training or studying - this way you will probably become very exhausted and unwilling to compete more. Whatever you do - have fun. Once you find programming is no fun anymore – drop it. Play soccer, find a girlfriend, study something not related to programming, just live a life - programming contests are only programming contests, and nothing more. Don't let them become your life - for your life is much more interesting and colorful." -- Petr

留言簿(3)

随笔分类(59)

随笔档案(43)

cows

搜索

  •  

最新评论

评论排行榜