又做了几道HOJ水题。。。
-
1010
: 纯粹的数学题,就在输出那要记住一点,C++
中要固定输出浮点数的位数,需要使用iomanip
库,使用setprecision()
函数即可。代码如下:
#include <iostream> #include <iomanip> using namespace std; int main(){ int hou, min; double min_ang, hou_ang, angle; while(cin >> hou >> min){ if(hou == 0 && min == 0) break; else{ min_ang = (double)(min * 6); hou_ang = (double)(hou % 12 * 30) + ((double)min) / 60.0 * 30.0; if(hou_ang >= min_ang) angle = hou_ang - min_ang <= 180 ? hou_ang - min_ang : 360 + min_ang - hou_ang; else angle = min_ang - hou_ang <= 180 ? min_ang - hou_ang : 360 - min_ang + hou_ang; cout << "At " << hou << ':'; if(min < 10) cout << 0 << min; else cout << min; cout << " the angle is " << fixed << setprecision(1) << angle << " degrees." << endl; } } }
-
1078
:setprecision()
固定输出精度后,后面的并不是简单舍去,而是四舍五入
。#include <iostream> #include <iomanip> using namespace std; int main(){ int tmp; double result; cout << "n e\n- -----------\n0 1\n1 2\n2 2.5" << endl; for(int i = 3; i < 10; i++){ cout << i << ' '; tmp = 2; result = 2.5; for(int j = 3; j <= i; j++){ tmp *= j; result += 1.0 / ((double)tmp); } cout << fixed << setprecision(9) << result << endl; } }
-
1034
: 这是一道重点在于字符串
的题目,正好复习一下C/C++的字符串相关的函数。总体来说不难,只要肯花时间就行,我已经能够按顺序输出数字了,但是后面的输出格式话实在太烦了,不想弄了,今天就到此为止吧。#include <iostream> #include <cstring> #include <string> #include <iomanip> using namespace std; void print(char d[], int s, int l){ char front[20], rear[20]; int tmp, front_num = 0, rear_num = 0, results[20], result; for(int i = 0; i < s; i++){ front[i] = d[i]; tmp = (int)front[i] - 48; for(int j = 1; j < s - i; j++) tmp *= 10; front_num += tmp; } front[s] = '\0'; for(int i = s + 1; i < l; i++){ rear[i - s - 1] = d[i]; tmp = (int)d[i] - 48; for(int j = 1; j < l - i; j++) tmp *= 10; rear_num += tmp; } rear[l - s] = '\0'; switch(d[s]){ case '+': result = front_num + rear_num; if(s >= l - s){ cout << front_num << endl; for(int i = 0; i < s - l + s; i++) cout << ' '; cout << '+' << rear_num << endl; for(int i = 0; i < s; i++) cout << '-'; cout << '\n' << setw(s) << result << endl; }else{ for(int i = 0; i < l - s - s; i++) cout << ' '; cout << front_num << endl; cout << '+' << rear_num << endl; for(int i = 0; i < l - s; i++) cout << '-'; cout << '\n' << setw(l - s) << result << endl; } break; case '-': result = front_num - rear_num; cout << front_num << endl; cout << '-' << rear_num << endl; for(int i = 0; i < strlen(rear); i++) cout << '-'; cout << '\n' << result << endl; break; case '*': result = front_num * rear_num; cout << front_num << endl; cout << '*' << rear_num << endl; for(int i = 0; i < strlen(rear); i++) cout << '-'; cout << endl; for(int i = l - s - 2; i >= 0; i--) cout << front_num * ((int)rear[i] - 48) << endl; for(int i = 0; i < strlen(rear); i++) cout << '-'; cout << '\n' << result << endl; break; } } int main(){ int count, sym, length; cin >> count; char input[40]; while(count--){ input[0] = '\0'; cin >> input; length = strlen(input); for(int i = 0; i < length; i++){ if((int)input[i] < 48 || (int)input[i] > 57) sym = i; } print(input, sym, length); } }