Fork me on GitHub

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

【正则】

  正则表达式是一种文本模式,包括普通字符(例如,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 //待研究、待看懂

 

posted @ 2015-03-27 10:25  郑斌blog  阅读(390)  评论(0编辑  收藏  举报