Life of xhu

About

HOJ_1010 & HOJ_1078 & HOJ_1034

Jan 21, 2014

  |   #C++   |   #HOJ

又做了几道HOJ水题。。。

  1. 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;
             }
         }
     }  
    
  2. 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;
         }
     }  
    
  3. 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);
         }
     }