首页 > 其他 > 详细

【NYOJ-513】大数处理、正则表达式

时间:2015-03-27 10:39:34      阅读:187      评论:0      收藏:0      [点我收藏+]

【正则】

  正则表达式是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”)。

  模式描述在搜索文本时要匹配的一个或多个字符串。

  常用字符:

1 //正则表达式
2 //$ 匹配输入字符串结尾的位置
3 //* 零次或多次匹配前面的字符或子表达式。例如,zo* 匹配“z”和“zoo”。* 等效于 {0,}
4 //+ 一次或多次匹配前面的字符或子表达式。例如,“zo+”与“zo”和“zoo”匹配,但与“z”不匹配。+ 等效于 {1,}。
5 //? 零次或一次匹配前面的字符或子表达式。例如,“do(es)?”匹配“do”或“does”中的“do”。? 等效于 {0,1}。           
6 //[xyz]  字符集。匹配包含的任一字符。例如,“[abc]”匹配“plain”中的“a”。
  正则表达式语法 链接:https://msdn.microsoft.com/zh-cn/library/ae5bf541(v=vs.80).aspx

【例题】

A+B Problem IV

时间限制:1000 ms  |  内存限制:65535 KB
难度:3
 
描述
acmj最近发现在使用计算器计算高精度的大数加法时很不方便,于是他想着能不能写个程序把这个问题给解决了。
 
输入
包含多组测试数据
每组数据包含两个正数A,B(可能为小数且位数不大于400)
输出
每组输出数据占一行,输出A+B的结果,结果需要是最简的形式。
样例输入
1.9 0.1
0.1 0.9
1.23 2.1
3 4.0
样例输出
2
1
3.33
7
【代码】
  Java:
 1 import java.math.BigDecimal;
 2 import java.util.Scanner;
 3 
 4 public class Bignumber {
 5     public static void main(String[] args) {
 6         Scanner cin = new Scanner(System.in);
 7         while (cin.hasNext()) {
 8             BigDecimal a = cin.nextBigDecimal();//移除组分隔符
 9             BigDecimal b = cin.nextBigDecimal();
10             BigDecimal c = a.add(b);
11             System.out.println(sw(c.toString()));
12         }
13     }
14     static String sw(String s) {
15         if (s.indexOf(".") > 0) {
16             System.out.println("*-*-");
17             s = s.replaceAll("0+?$", "");
18             s = s.replaceAll("[.]$", "");
19         }
20         return s;
21     }
22 }

  C++:

 1 #include <stdio.h>
 2 #include <string.h>
 3 #define MAX 1000
 4 char a[MAX],b[MAX],c[MAX];
 5 int main()
 6 {
 7     int i,j,k,l,m,n,la,lb,mx;
 8     char ch;
 9     memset(a,0,sizeof(a));
10     memset(b,0,sizeof(b));
11     while(~scanf("%s%s",a,b))
12     {
13         la=strlen(a);
14         lb=strlen(b);
15         a[la]=0;
16         b[lb]=0;
17         i=0;
18         while((a[i]-.)&&i<la)
19         {
20             i++;
21         }
22         if(i==la)
23             a[la]=.;
24         j=0;
25         while((b[j]-.)&&j<lb)
26         {
27             j++;
28         }
29         if(j==lb)
30             b[lb]=.;
31         m=(la-i)>(lb-j)?(la-i):(lb-j);
32         if(i>=j)
33         {
34             for(l=mx=i+m,k=0,j=i-j;l>=0;l--)
35             {
36                 if(a[l]==.)
37                 {
38                     c[l]=.;
39                     continue;
40                 }
41                 ch=(l-j)<0?0:b[l-j];
42                 c[l]=(a[l]-0+ch-0+k)%10+0;
43                 k=(a[l]-0+ch-0+k)/10;
44             }
45         }
46         else
47         {
48             for(l=mx=j+m,k=0,j=j-i;l>=0;l--)
49             {
50                 if(b[l]==.)
51                 {
52                     c[l]=.;
53                     continue;
54                 }
55                 ch=(l-j)<0?0:a[l-j];
56                 c[l]=(ch-0+b[l]-0+k)%10+0;
57                 k=(ch-0+b[l]-0+k)/10;
58             }
59         }
60         if(k>0)
61             printf("%d",k);
62         while(c[mx]==0)
63             mx--;
64         if(c[mx]==.)
65             mx--;
66         for(i=0;i<=mx;i++)
67             printf("%c",c[i]);
68         printf("\n");
69         memset(a,0,sizeof(a));
70         memset(b,0,sizeof(b));
71     }
72 } 
73 //待研究、待看懂

 

【NYOJ-513】大数处理、正则表达式

原文:http://www.cnblogs.com/zhengbin/p/4371040.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!