标签:正整数 img width 距离 for mes 高精度 last ace
1069 浮点数加法
描述 | |
求2个浮点数相加的和 题目中输入输出中出现浮点数都有如下的形式: P1P2...Pi.Q1Q2...Qj 对于整数部分,P1P2...Pi是一个非负整数 对于小数部分,Qj不等于0 |
|
关于输入 | |
第1行是测试数据的组数n,每组测试数据占2行,分别是两个加数。每组测试数据之间有一个空行,每行数据不超过100个字符 | |
关于输出 | |
n行,每组测试数据有一行输出是相应的和。输出保证一定是一个小数部分不为0的浮点数 | |
例子输入 | |
2
|
|
例子输出 | |
0.222222222222222222222222222222
|
1 #include <iostream>
2 #include<stdlib.h>
3 #include<string>
4 using namespace std;
5 int main()
6 {
7 int point1, point2,point,len1,len2,len;
8 int n;
9 cin >> n;
10 for(int i=0;i<n;i++)
11 {
12 char ch1[100], ch2[100];
13 int num1[100] = { 0 }, num2[100] = { 0 }, num[200] = { 0 };
14 cin.ignore();
15 cin >> ch1;
16 cin.ignore();
17 cin >> ch2;
18 len1 = strlen(ch1);
19 len2 = strlen(ch2);
20 for(int j=0;ch1[j]!=‘.‘;j++)
21 {
22 num1[j] = ch1[j]-‘0‘;
23 point1 = j+1;
24 }
25 for (int j = point1; ch1[j+1]!=‘\0‘; j++)
26 num1[j] = ch1[j + 1]-‘0‘;
27 for (int j = 0; ch2[j] != ‘.‘; j++)
28 {
29 num2[j] = ch2[j] - ‘0‘;
30 point2 = j + 1;
31 }
32 for (int j = point2; ch2[j + 1]!=‘\0‘; j++)
33 num2[j] = ch2[j + 1]-‘0‘;
34 if(point1>=point2)
35 {
36 for (int j = point1 - point2 ; j <=point1-point2+len2-2; j++)
37 num[j] = num2[j - point1 + point2 ];
38 len = len1-2 > point1 - point2 + len2-2 ? len1-2 : point1 - point2 + len2-2 ;
39 for(int j=0;j<=len;j++)
40 {
41 num[len-j] += num1[len-j];
42 if(num[len-j]>9)
43 {
44 num[len-j - 1]++;
45 num[len-j] -= 10;
46 }
47 }
48 for (int j = 0; j <= point1 - 1; j++)
49 cout << num[j];
50 cout << ".";
51 int last;
52 for (int j = 199; num[j] == 0; j--)
53 last = j - 1;
54 for (int j = point1; j <= last; j++)
55 cout << num[j];
56 cout << endl;
57 }
58 else
59 {
60 for (int j = point2 - point1; j <= point2 - point1 + len1 - 2; j++)
61 num[j] = num1[j - point2 + point1];
62 len = len2 - 2 > point2 - point1 + len1 - 2 ? len2 - 2 : point2 - point1 + len1 - 2;
63 for (int j = 0; j <= len; j++)
64 {
65 num[len - j] += num2[len - j];
66 if (num[len - j]>9)
67 {
68 num[len - j - 1]++;
69 num[len - j] -= 10;
70 }
71 }
72 for (int j = 0; j <= point2 - 1; j++)
73 cout << num[j];
74 cout << ".";
75 int last;
76 for (int j = 199; num[j] == 0; j--)
77 last = j - 1;
78 for (int j = point2; j <= last; j++)
79 cout << num[j];
80 cout << endl;
81 }
82 }
83 }
习题(11-12) 计算2的N次方
描述 | |
任意给定一个非负整数N(N<=100),计算2的N次方的值。 | |
关于输入 | |
输入只有一个非负整数N。 | |
关于输出 | |
输出2的N次方的值。 | |
例子输入 | |
5
|
|
例子输出 | |
32
|
|
提示 | |
高精度计算 |
1 #include <iostream>
2 #include<stdlib.h>
3 #include<string>
4 using namespace std;
5 int main()
6 {
7 int mul[40] = { 0 };
8 mul[39] = 1;
9 int n;
10 cin >> n;
11 for (int i = 0; i<n; i++)
12 {
13 int peak;
14 for (int j = 1; mul[j] == 0; j++)
15 peak = j;
16 for (int j = peak; j <= 39; j++)
17 {
18 mul[j] *= 2;
19 if (mul[j] >= 10)
20 {
21 mul[j - 1]++;
22 mul[j] -= 10;
23 }
24 }
25 }
26 int flag = 0;
27 for (int i = 0; i <= 39; i++)
28 {
29 if (flag == 1)
30 cout << mul[i];
31 if (mul[i] != 0 && flag == 0)
32 {
33 flag = 1;
34 cout << mul[i];
35 }
36 }
37 cout << endl;
38 }
除以13
描述 | |
输入一个大于0的大整数N,长度不超过100位,要求输出其除以13的整数除法得到的商和余数。 | |
关于输入 | |
一个大于0的大整数,长度不超过100。 | |
关于输出 | |
两行,分别为整数除法得到的商和余数。 | |
例子输入 | |
例子1
|
|
例子输出 | |
例子1
|
|
提示 | |
模拟除法运算,商的长度应该比输入大整数的长度少1或2。 |
1 #include <iostream>
2 #include<stdlib.h>
3 #include<string>
4 using namespace std;
5 int main()
6 {
7 int quo[100] , num[100];
8 for(int i=0;i<100;i++)
9 {
10 quo[i] = -1;
11 num[i] = -1;
12 }
13 int remain = 0,flag=0;
14 char str[100];
15 cin >> str;
16 for (int i = 0; str[i] != ‘\0‘; i++)
17 num[i] = str[i] - ‘0‘;
18 for(int i=0;str[i]!=‘\0‘;i++)
19 {
20 quo[i] = num[i] / 13;
21 remain = num[i] % 13;
22 if(str[i]!=‘\0‘)
23 num[i + 1] += remain * 10;
24 }
25 for(int i=0;quo[i]>=0;i++)
26 {
27 if (flag == 1)
28 cout << quo[i];
29 if (quo[i] != 0 && flag == 0)
30 {
31 flag = 1;
32 cout << quo[i];
33 }
34 }
35 if (flag == 0)
36 cout << "0";
37 cout << endl;
38 cout << remain << endl;
39 }
扩号匹配问题
描述 | |
在某个字符串(长度不超过100)中有左括号、右括号和大小写字母;规定(与常见的算术式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配。写一个程序,找到无法匹配的左括号和右括号:首先输出原来字符串,下一行是和原字符串等长的一行,标出不能匹配的括号,其中不能匹配的左括号用"$"标注,不能匹配的右括号用"?"标注 |
|
关于输入 | |
第一行一个正整数n,表示数据的组数。后面n行,每组数据一行,包含一个字符串,只包含左右括号和大小写字母,字符串长度不超过100 | |
关于输出 | |
对每组输出数据,输出两行,第一行包含原始输入字符,第二行由"$","?"和空格组成,与第一行等长,"$"和"?"表示与之对应的左括号和右括号不能匹配。 注意:即使所有括号都匹配,第二行也要输出等长的一行空格 |
|
例子输入 | |
2
|
|
例子输出 | |
((ABCD(x)
|
1 #include <iostream>
2 #include<stdlib.h>
3 #include<string>
4 using namespace std;
5 int main()
6 {
7 char str[105],str2[105];
8 int n;
9 cin >> n;
10 for(int i=0;i<n;i++)
11 {
12 cin >> str;
13 int len = strlen(str)-1;
14 for (int i = 0; i <=len; i++)
15 str2[i] = ‘ ‘;
16 int left=0, right=0;
17 for (int i = 0; i <= len; i++)
18 {
19 if (str[i] == ‘(‘)
20 left++;
21 else if (str[i] == ‘)‘&&left == 0)
22 str2[i] = ‘?‘;
23 else if (str[i] == ‘)‘&&left != 0)
24 left--;
25 }
26 for (int i = len; i >=0; i--)
27 {
28 if (str[i] == ‘)‘)
29 right++;
30 else if (str[i] == ‘(‘&&right == 0)
31 str2[i] = ‘$‘;
32 else if (str[i] == ‘(‘&&right != 0)
33 right--;
34 }
35 for(int i=0;i<=len;i++)
36 cout << str[i];
37 cout << endl;
38 for (int i = 0; i <= len; i++)
39 cout << str2[i];
40 cout << endl;
41 }
42 }
确定进制
描述 | |
6*9 = 42 对于十进制来说是错误的,但是对于13进制来说是正确的。因为, 6(13) * 9(13) = 42(13), 而 42(13) = 4 * 13 + 2 = 54(10) 你的任务是写一段程序读入三个整数p, q和 r,然后确定一个进制 B (2<=B<=16) 使得 p * q = r. 如果 B有很多选择, 输出最小的一个。例如: p = 11, q = 11, r = 121. 则有 11(3) * 11(3) = 121(3) 因为 11(3) = 1 * 3 + 1 = 4(10) 和 121(3) = 1 * 3^2 + 2 * 3 + 1 = 16(10)。 对于进制 10,有 11(10) * 11(10) = 121(10)。这种情况下,应该输出 3。如果没有合适的进制,则输出 0。 |
|
关于输入 | |
输入有 T组测试样例。 T在第一行给出。每一组测试样例占一行,包含三个整数p, q, r。 p, q, r 的所有位都是数字,并且1<=p,q, r<=1,000,000 | |
关于输出 | |
对于每个测试样例输出一行。该行包含一个整数,即使得p * q = r成立的最小的B。如果没有合适的B,则输出 0。 | |
例子输入 | |
3
|
|
例子输出 | |
13
|
1 #include <iostream>
2 #include<stdlib.h>
3 #include<string>
4 #include<math.h>
5 using namespace std;
6 int main()
7 {
8 int t, max=0;
9 cin >> t;
10 for (int count= 0; count< t; count++)
11 {
12 max = 0;
13 char p[10], q[10], r[10];
14 int flag = 0;
15 cin >> p >> q >> r;
16 for (int i = 0; p[i] != ‘\0‘; i++)
17 {
18 if (p[i] - ‘0‘ > max)
19 max = p[i]-‘0‘;
20 }
21 for (int i = 0; q[i] != ‘\0‘; i++)
22 {
23 if (q[i] - ‘0‘ > max)
24 max = q[i]-‘0‘;
25 }
26 for (int i = 0; r[i] != ‘\0‘; i++)
27 {
28 if (r[i] - ‘0‘ > max)
29 max =r[i]-‘0‘;
30 }
31 for (int j = max+1; j <= 16; j++)
32 {
33 int p1=0, q1=0, r1=0,p2=atoi(p),q2=atoi(q),r2=atoi(r);
34 for (int i = 0; p2 != 0; i++)
35 {
36 p1 += p2 % 10 * pow(j, i);
37 p2 /= 10;
38 }
39 for (int i = 0; q2 != 0; i++)
40 {
41 q1 +=q2 % 10 * pow(j, i);
42 q2 /= 10;
43 }
44 for (int i = 0; r2 != 0; i++)
45 {
46 r1 += r2 % 10 * pow(j, i);
47 r2 /= 10;
48 }
49 if (q1 * p1 == r1)
50 {
51 cout << j << endl;
52 flag = 1;
53 break;
54 }
55 }
56 if (flag == 0)
57 cout << 0 << endl;
58 }
59 }
提取数字串按数值排序
描述 | |
输入一串不超过300个字符的符号序列,请将其中的所有数字串提出,并将每个数字串作为整数看待(假设可以用int 表示),按从小到大顺序输出结果,输出的整数之间以逗号间隔。如果没有数字,则输出0;例如:*1234.345#6781ad9jk81-11101?aght88ir09kp,其中的整数包括:1234,345,6781,9,81,11101,88,9,从小到大排序后,应该输出: 9,9,81,88,345,1234,6781,11101 |
|
关于输入 | |
在一行内输入一串符号 | |
关于输出 | |
从小到大排序的整数序列,如果没有数字,则输出0; | |
例子输入 | |
*1234.345#6781ad9jk81-11101?aght88ir09kp
|
|
例子输出 | |
9,9,81,88,345,1234,6781,11101
|
1 #include <iostream>
2 #include<stdlib.h>
3 #include<string>
4 using namespace std;
5 int main()
6 {
7 char str[400];
8 int flag=0,count=0;
9 int num[200];
10 cin >> str;
11 for (int i = 0; str[i] != ‘\0‘; i++)
12 {
13 if (flag == 0 && str[i] >= ‘0‘&&str[i] <= ‘9‘)
14 {
15 count++;
16 num[count] = str[i] - ‘0‘;
17 flag = 1;
18 continue;
19 }
20 if (flag == 1 && str[i] >= ‘0‘&&str[i] <= ‘9‘)
21 {
22 num[count] = num[count] * 10 + str[i] - ‘0‘;
23 continue;
24 }
25 if(flag==1&&( str[i] < ‘0‘||str[i] > ‘9‘))
26 flag = 0;
27 }
28 if (count == 0)
29 cout << "0" << endl;
30 else
31 {
32 for (int i = 1; i <= count - 1; i++)
33 for (int j = 1; j <= count - i; j++)
34 {
35 int swap;
36 if (num[j] > num[j + 1])
37 {
38 swap = num[j];
39 num[j] = num[j + 1];
40 num[j + 1] = swap;
41 }
42 }
43 cout << num[1];
44 for (int i = 2; i <= count; i++)
45 cout << "," << num[i];
46 cout << endl;
47 }
48 return 0;
49 }
※有年代的病历单
描述 | |
小英是药学专业大三的学生,暑假期间获得了去医院药房实习的机会。 在药房实习期间,小英扎实的专业基础获得了医生的一致好评,得知小英在计算概论中取得过好成绩后,主任又额外交给她一项任务,解密抗战时期被加密过的一些伤员的名单。 经过研究,小英发现了如下加密规律(括号中是例子) 1. 原文中所有的字符都被循环左移了三个单位(dec -> abz) 2. 逆序存储(abcd -> dcba ) 3. 大小写反转(abXY -> ABxy) |
|
关于输入 | |
共n+1行 第一行是名单中名字的个数n(1<=n <= 1000) 随后是n行,每行是一个加密的字符串。(串长小于12) |
|
关于输出 | |
n行 按照字典顺序输出解密后的字符串 |
|
例子输入 | |
5
|
|
例子输出 | |
Dlvijjngv
|
1 #include <iostream>
2 #include<stdlib.h>
3 #include<string>
4 using namespace std;
5 int main()
6 {
7 char name[1500][15], after[1500][15];
8 int n;
9 cin >> n;
10 for (int i = 0; i < n; i++)
11 {
12 cin >> name[i];
13 int len;
14 for (int j = 0; name[i][j] != ‘\0‘; j++)
15 {
16 name[i][j] += 3;
17 if (name[i][j] > ‘z‘)
18 name[i][j] -= 26;
19 if (name[i][j] > ‘Z‘&&name[i][j] < ‘a‘)
20 name[i][j] -= 26;
21 len = j;
22 if (name[i][j] >= ‘a‘&&name[i][j] <= ‘z‘)
23 name[i][j] += ‘A‘ - ‘a‘;
24 else
25 name[i][j] += ‘a‘ - ‘A‘;
26 }
27 for (int j = len; j >= 0; j--)
28 after[i][len - j] = name[i][j];
29 after[i][len + 1] = ‘\0‘;
30 }
31 for (int i = 0; i<n - 1; i++)
32 for (int j = 0; j < n - i - 1;j++)
33 {
34 int len1, len2, flag = 0;
35 len1 = strlen(after[j]);
36 len2 = strlen(after[j + 1]);
37 for (int m = 0; m<=len1<len2?len1:len2;m++)
38 {
39 if (after[j][m] > after[j + 1][m])
40 {
41 char swap[15];
42 strcpy(swap, after[j]);
43 strcpy(after[j], after[j + 1]);
44 strcpy(after[j + 1], swap);
45 flag = 1;
46 break;
47 }
48 else if (after[j][m] == after[j + 1][m])
49 continue;
50 else if (after[j][m] < after[j + 1][m])
51 {
52 flag = 1;
53 break;
54 }
55 }
56 if (flag == 0 && len1>len2)
57 {
58 char swap[15];
59 strcpy(swap, after[j]);
60 strcpy(after[j], after[j + 1]);
61 strcpy(after[j + 1], swap);
62 flag = 1;
63 break;
64 }
65 }
66 for (int i = 0; i < n; i++)
67 cout << after[i] << endl;
68 return 0;
69 }
印象最深刻的一道题
WA了好几次
迷之字典顺序(还是第一次知道存在这样的排序方式)(遁)
标签:正整数 img width 距离 for mes 高精度 last ace
原文地址:http://www.cnblogs.com/yalphait/p/7898987.html