zoukankan      html  css  js  c++  java
  • 四则运算1

    四则运算 支持整数和真分数

     1 #include <iostream>
     2 #include <ctime>
     3 #include <cstdlib>
     4 #include <string>
     5 #include <iomanip>
     6 #include <sstream>
     7 using namespace std;
     8 
     9 bool isTrueFraction(int numerator,int denominator)    //判断产生的分数是否是真分数
    10 {
    11     if(numerator >= denominator)
    12         return false;
    13 
    14     for(int i = 2 ; i <= numerator ; i++)      //判断分数是否能够约分
    15     {
    16         if(numerator % i ==0 && denominator % i ==0)
    17             return false;
    18     }
    19 
    20     return true;
    21 }
    22 
    23 string getNum()
    24 {
    25     int n = rand();
    26     if(n%7 == 0)       //若随机数n是7的倍数,产生一个真分数和一个整数,否则为两个整数
    27     {
    28         int num1 = rand() % 100;
    29         int num2 = rand() % 100;
    30         int num3 = rand() % 100;
    31        // cout << num1 <<"+"<<num2<<"+"<<num3<<endl;
    32         if(isTrueFraction(num1,num2))
    33         {
    34             stringstream s1,s2,s3;
    35             string ss1,ss2,ss3;
    36             s1<<num1;
    37             s1>>ss1;
    38             s2<<num2;
    39             s2>>ss2;
    40             s3<<num3;
    41             s3>>ss3;
    42             return ss1+"/"+ss2+","+ss3;
    43         }else
    44         {
    45             return getNum();
    46         }
    47     }else
    48     {
    49         int num1 = rand() % 100;
    50         int num2 = rand() % 100;
    51         //cout << num1 <<"+"<<num2<<endl;
    52         stringstream s1,s2;
    53         string ss1,ss2;
    54         s1<<num1;
    55         s1>>ss1;
    56         s2<<num2;
    57         s2>>ss2;
    58         return ss1+","+ss2;
    59     }
    60 }
    61 
    62 char getOperator(string num2)
    63 {
    64     char a[] = {'+','-','*','/'};
    65     if(num2 == "0")
    66         return a[rand() % 3];
    67     else
    68         return a[rand() % 4];
    69 
    70 }
    71 
    72 
    73 int main(int argc, char *argv[])
    74 {
    75     srand((int)time(0));
    76 
    77     for(int i = 0; i < 30 ; i++){
    78         string num = getNum();
    79         string num1 = num.substr(0,num.find(","));  //由逗号分割,
    80         string num2 = num.substr(num.find(",")+1);
    81         char op = getOperator(num2);
    82         cout <<left << setw(4) << i+1 << setw(5)<<num1 <<setw(2)<<op<<setw(5)<<num2 <<endl;
    83     }
    84 
    85     return 0;
    86 }



    首先 getNum()获得两个数,并用逗号分隔的字符串格式返回,通过string::find()和string::substr()分别获得两个运算数,
    然后 通过getOperator()获得运算符,并以第二个数作为参数,如果第二个数为0,那么不能取除法,
    最后 附上运行截图。




  • 相关阅读:
    友盟推送
    主流推送平台分析
    “完成”的定义和测试的职责
    HDU 1069 Monkey and Banana
    HDU 5587 Array
    ACM组队安排(hdu校赛)
    逆袭指数(hdu校赛)
    玩骰子(hdu校赛)
    Codeforce 546 A. Soldier and Bananas
    Codeforce 546 B. Soldier and Badges
  • 原文地址:https://www.cnblogs.com/xiaoxt/p/5248925.html
Copyright © 2011-2022 走看看