【大数处理、正则表达式】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 //待研究、待看懂

 

你可能感兴趣的:(正则表达式)