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

posted @ 2012-08-07 16:18  Griselda.  阅读(251)  评论(0编辑  收藏  举报