[대수 처리, 정규 표현 식] NYOJ - 513

17218 단어 정규 표현 식
[정규]
정규 표현 식 은 일반 문자 (예 를 들 어 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 를 포함한다.
출력
각 그룹의 출력 데 이 터 는 한 줄 을 차지 하고 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("
"); 69 memset(a,'0',sizeof(a)); 70 memset(b,'0',sizeof(b)); 71 } 72 } 73 //

좋은 웹페이지 즐겨찾기