又是一道CYJJ出的题目,比较有意思。
题目的意思是给出两个数,做A+B运算,当然这可不是1001,这两个数的表示方法不简单,每一位的进制不同,从右向左,第i位的进制我第i个素数,比 如"1,0"表示的十进制数字是2,因为第一位是0,进位到第二位了,于是就是2,比如"1,0,0",就是6了,经过两次进位到了进制是5的一位,题目 看懂了做起来就简单了,以前看好几遍一直不知道题目讲的是什么,当然,这可不是CYJJ的错,只是我的英语水平差啦。。
看上去好像是要大数表示法去做,其实不用,在一位一位的进行处理就行了,第i位的加法是第i位的两个数字a,b相加,再加上前面得到的进位co,得到一个 sum,将sum除prime[i]取余就是结果的第i位,sum除以prime[i]就是下一个进位,这样不断的做下去,直到做完为止。这倒是跟逻辑计 算机中的串行进位加法器有点像,呵呵。
附上代码:in C++
代码
1
#include
<
iostream
>
2 #include < string >
3 #include < vector >
4 #include < algorithm >
5 #include < stack >
6 #include < cstdio >
7 using namespace std;
8
9 int main()
10 {
11 stack < int > va,vb;
12 int num ;
13 char c ;
14 int p[] = { 2 , 3 , 5 , 7 , 11 , 13 , 17 , 19 , 23 , 29 , 31 , 37 , 41 , 43 , 47 , 53 , 59 , 61 , 67 , 71 , 73 , 79 , 83 , 89 , 97 };
15
16 while (scanf( " %d " , & num) != EOF)
17 {
18 va.push(num);
19 c = getchar();
20 while (c == ' , ' )
21 {
22 scanf( " %d " , & num);
23 va.push(num);
24 c = getchar();
25 }
26 scanf( " %d " , & num);
27 vb.push(num);
28 c = getchar();
29 while (c == ' , ' )
30 {
31 scanf( " %d " , & num);
32 vb.push(num);
33 c = getchar();
34 }
35 int n = max(va.size(),vb.size());
36 stack < int > res;
37 int co = 0 ;
38 int a , b ;
39 for ( int i = 0 ; i < n ; i ++ )
40 {
41 if ( ! va.empty())
42 {
43 a = va.top();
44 va.pop();
45 }
46 else a = 0 ;
47 if ( ! vb.empty())
48 {
49 b = vb.top();
50 vb.pop();
51 }
52 else b = 0 ;
53 int sum = a + b + co;
54 res.push(sum % p[i]);
55 co = sum / p[i] ;
56 }
57 for ( int i = n ; co != 0 ; i ++ )
58 {
59 res.push(co % p[i]);
60 co = co / p[i] ;
61 }
62 cout << res.top();
63 res.pop();
64 while ( ! res.empty())
65 {
66 cout << " , " << res.top();
67 res.pop();
68 }
69 cout << endl;
70 }
71
72 return 0 ;
73 }
2 #include < string >
3 #include < vector >
4 #include < algorithm >
5 #include < stack >
6 #include < cstdio >
7 using namespace std;
8
9 int main()
10 {
11 stack < int > va,vb;
12 int num ;
13 char c ;
14 int p[] = { 2 , 3 , 5 , 7 , 11 , 13 , 17 , 19 , 23 , 29 , 31 , 37 , 41 , 43 , 47 , 53 , 59 , 61 , 67 , 71 , 73 , 79 , 83 , 89 , 97 };
15
16 while (scanf( " %d " , & num) != EOF)
17 {
18 va.push(num);
19 c = getchar();
20 while (c == ' , ' )
21 {
22 scanf( " %d " , & num);
23 va.push(num);
24 c = getchar();
25 }
26 scanf( " %d " , & num);
27 vb.push(num);
28 c = getchar();
29 while (c == ' , ' )
30 {
31 scanf( " %d " , & num);
32 vb.push(num);
33 c = getchar();
34 }
35 int n = max(va.size(),vb.size());
36 stack < int > res;
37 int co = 0 ;
38 int a , b ;
39 for ( int i = 0 ; i < n ; i ++ )
40 {
41 if ( ! va.empty())
42 {
43 a = va.top();
44 va.pop();
45 }
46 else a = 0 ;
47 if ( ! vb.empty())
48 {
49 b = vb.top();
50 vb.pop();
51 }
52 else b = 0 ;
53 int sum = a + b + co;
54 res.push(sum % p[i]);
55 co = sum / p[i] ;
56 }
57 for ( int i = n ; co != 0 ; i ++ )
58 {
59 res.push(co % p[i]);
60 co = co / p[i] ;
61 }
62 cout << res.top();
63 res.pop();
64 while ( ! res.empty())
65 {
66 cout << " , " << res.top();
67 res.pop();
68 }
69 cout << endl;
70 }
71
72 return 0 ;
73 }