Hdu 2100 Lovekey 模拟大数相加<进位转换..>

题意:

用A~Z表示0~25..

给出2个200以内的XYZ-26进制数..即a0 a1 a2 a3……an

求出和..用XYZ-26进制表示..

其中XYZ-26 -> 10进制是m = a0 * 26^(n-1) + a1 * 26^(n-2) + … + an-3* 26^2 + an-2*26 + an-1 

思路:

不用进行转换然后相加再换回去..

直接相加..

模拟进位..

Tips:

※可以直接把短的加到长的字符串上..eg:ABC+CD就是           ABC

                                     +  CD

                                   ------------

                                      BFL

※ 主要是进位的时候要考虑清楚..

※ 在长字符串上处理..就不用担心不知道该在前面保留多少位的问题了..

※ 输出去前导无意义 ‘A' 的时候要考虑到AAAAA的情况..最后输出'A'

 

Code:

 

View Code
 1 #include <stdio.h>

 2 #include <cstring>

 3 

 4 void add(char *a, char *b)

 5 {

 6     int i, j, k;

 7     int len1, len2;

 8     int tmp=0;

 9     len1 = strlen(a), len2 = strlen(b);

10     for(i = len1-1, j = len2-1; i >= 0;){

11         if(j >= 0){

12             a[i] = a[i] - 'A' + b[j] + tmp;

13             tmp = 0;

14             if(a[i] > 'Z'){

15                 a[i] -= ('Z' - 'A' + 1);

16                 tmp = 1;

17             }

18             --i, --j;

19         }

20         else{

21             a[i] = a[i] + tmp;

22             tmp = 0;

23             if(a[i] > 'Z'){

24                 a[i] -= ('Z'-'A'+1);

25                 tmp = 1;

26             }

27             --i;

28 

29         }

30     }

31     if(tmp){

32         for(i = len1; i >= 0; --i)

33             a[i+1] = a[i];

34         a[0] = 'B';

35     }

36 

37 }

38 

39 void outPut(char *a)

40 {

41     int len = strlen(a);

42     bool flag = false;

43     for(int i = 0; i < len; ++i){

44         if(a[i] != 'A') flag = true;

45         if(flag) printf("%c", a[i]);

46     }

47     if(!flag) puts("A");

48     else puts("");

49 }

50 

51 int main()

52 {

53     char arr1[210], arr2[210];

54     int len1, len2;

55     while(scanf("%s %s", arr1, arr2) != EOF)

56     {

57         len1 = strlen(arr1);

58         len2 = strlen(arr2);

59         if(len1 > len2){

60             add(arr1, arr2);

61             outPut(arr1);

62         }

63         else{

64             add(arr2, arr1);

65             outPut(arr2);

66         }

67     }

68     return 0;

69 }

 

 

高精度到此完一段落了..其实还有几题没做..到时候再说吧~Hdu 1250 1297 1905

你可能感兴趣的:(love)