1069 浮点数加法
描述 | |
求2个浮点数相加的和 题目中输入输出中出现浮点数都有如下的形式: P1P2...Pi.Q1Q2...Qj 对于整数部分,P1P2...Pi是一个非负整数 对于小数部分,Qj不等于0 |
|
关于输入 | |
第1行是测试数据的组数n,每组测试数据占2行,分别是两个加数。每组测试数据之间有一个空行,每行数据不超过100个字符 | |
关于输出 | |
n行,每组测试数据有一行输出是相应的和。输出保证一定是一个小数部分不为0的浮点数 | |
例子输入 | |
2 0.111111111111111111111111111111 0.111111111111111111111111111111 10000000.655555555555555555555555555555 1.444444444444444444444444444445 |
|
例子输出 | |
0.222222222222222222222222222222 10000002.1 |

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 2132104848488485 例子2 10382942388594365769456845647694 |
|
例子输出 | |
例子1 164008065268345 0 例子2 798687876045720443804372742130 4 |
|
提示 | |
模拟除法运算,商的长度应该比输入大整数的长度少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) )(rttyy())sss)( |
|
例子输出 | |
((ABCD(x) $$ )(rttyy())sss)( ? ?$ |

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 6 9 42 11 11 121 2 2 2 |
|
例子输出 | |
13 3 0 |

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行 按照字典顺序输出解密后的字符串 |
|
例子输入 | |
5WDDFSSPSDSDSDDoSDKGGFSIaLLLHFGFOlGSOOWFASOq |
|
例子输出 | |
DlvijjngvOrijikoooRggvgvgvTrvdizrrvjsvviggz |

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了好几次
迷之字典顺序(还是第一次知道存在这样的排序方式)(遁)
来源:https://www.cnblogs.com/yalphait/p/7898987.html