zoukankan      html  css  js  c++  java
  • UVA465:Overflow

    WA了三次;仅仅是因为输出输入数据时,先去了了前导0.罪过啊!!

      1 #include<iostream>
      2 #include<string>
      3 #include<limits>
      4 #include<sstream>
      5 using namespace std;
      6 
      7 inline string reverse(const string a)
      8 {
      9     string t(a.rbegin(), a.rend());
     10     return t;
     11 }
     12 string operator + (const string& a, const string& b)
     13 {
     14     string sum = "";
     15     int c = 0, i = 0;
     16     for( ; i < a.size() && i < b.size(); ++i)
     17     {
     18         c += a[i] - '0' + b[i] - '0';
     19         sum += c%10 + '0';
     20         c /= 10;
     21     }
     22     while(i < a.size())
     23     {
     24         c += a[i] - '0';
     25         sum += c % 10 + '0';
     26         c /= 10;
     27         ++i;
     28     }
     29     while(i < b.size())
     30     {
     31         c += b[i] - '0';
     32         sum += c % 10 + '0';
     33         c /= 10;
     34         ++i;
     35     }
     36     if(c)
     37         sum += 1 + '0';
     38     return sum;
     39 }
     40 string operator +=(string& a, string& b)
     41 {
     42     return a = a+b;
     43 }
     44 string operator * (string& a, string& b)
     45 {
     46     if(a.size() > b.size())
     47     {
     48         string t(a);
     49         a = b;
     50         b = t;
     51     }
     52     string tot = "0";
     53     for(int i = 0; i != a.size(); ++i)
     54     {
     55         string sum(i, '0');
     56         int c = 0;
     57         for(int j = 0; j != b.size(); ++j)
     58         {
     59             c += (a[i] - '0') * (b[j] - '0');
     60             sum += (c % 10 + '0');
     61             c /= 10;
     62         }
     63         while(c)
     64         {
     65             sum += (c%10 + '0');
     66             c /= 10;
     67         }
     68         tot += sum;
     69     }
     70     return tot;
     71 }
     72 
     73 string del_pre_zero(string& a)
     74 {
     75     int i = 0;
     76     for(; a[i] == '0' && i != a.size(); ++i);
     77     if(i == a.size())
     78         a = "0";
     79     else
     80     {
     81         string b(a.begin()+i, a.end());
     82         a = b;
     83     }
     84     return a;
     85 }
     86 
     87 inline bool is_bigger(const string& a, const string& b)
     88 {
     89     if(a.size() != b.size())
     90         return a.size() > b.size();
     91     return a > b;
     92 }
     93 int main()
     94 {
     95     string a, b, c, sum;
     96     int n = (numeric_limits<int>::max)();
     97     stringstream ss;
     98     ss << n;
     99     string max_int;
    100     ss >> max_int;
    101     //cout << max_int << endl;//2147483647
    102     while(cin >> a >> c >> b)//getline(cin, a), a != "0")
    103     {
    104         cout << a << " " << c << " " << b << endl;
    105         a = del_pre_zero(a);
    106         b = del_pre_zero(b);
    107         if(is_bigger(a, max_int))
    108             cout << "first number too big" << endl;
    109         if(is_bigger(b, max_int))
    110             cout << "second number too big" << endl;
    111         sum = "";
    112         a = reverse(a);
    113         b = reverse(b);
    114         if(c == "+")
    115             sum = a + b;
    116         else if(c == "*")
    117             sum = a * b;
    118         sum = reverse(sum);
    119         sum = del_pre_zero(sum);
    120         if(is_bigger(sum, max_int))
    121             cout << "result too big" << endl;
    122     }
    123     return 0;
    124 }
    465:Overflow
      1 #include<iostream>
      2 #include<string>
      3 #include<sstream>
      4 
      5 using namespace std;
      6 
      7 string del_pre_zero(const string& a)
      8 {
      9     int i = 0;
     10     for(; a[i] == '0' && i != a.size(); ++i);
     11     if(i == a.size())
     12         return "0";
     13     string t(a.begin()+i, a.end());
     14     return t;
     15 }
     16 bool is_not_small(const string& a, const string& b)
     17 {
     18     if(a.size() != b.size())
     19         return a.size() > b.size();
     20     return a >= b;
     21 }
     22 
     23 string reverse(const string& a)
     24 {
     25     string t(a.rbegin(), a.rend());
     26     return t;
     27 }
     28 string operator - (const string& a, const string& b)
     29 {
     30     //cout << "a: " << a << "  " << "b: " << b << endl;
     31     string result = "";
     32     string x(a), y(b);
     33     bool flag = true;
     34     if(!is_not_small(a, b))
     35     {
     36         flag = false;
     37         string t(x);
     38         x = y;
     39         y = t;
     40     }
     41     x = reverse(x);
     42     y = reverse(y);
     43     int i, cur, c;
     44     i = cur = c = 0;
     45     for(; i < y.size(); ++i)
     46     {
     47         cur = x[i] - y[i] + c;
     48         (cur < 0) ? (cur += 10, c = -1) : (c = 0);
     49         result +=(cur + '0');
     50     }
     51     while(i < x.size())
     52     {
     53         cur = x[i] - '0' + c;
     54         (cur < 0) ? (cur += 10, c = -1) : (c = 0);
     55         result += (cur + '0');
     56         ++i;
     57     }
     58     if(!flag)
     59     {
     60         string t = "-";
     61         t += result;
     62         result = t;
     63     }
     64     result = reverse(result);
     65     return del_pre_zero(result);
     66 }
     67 
     68 string operator -= (string& a, const string& b)
     69 {
     70     return a = a - b;
     71 }
     72 string operator / (const string& a, const string& b)
     73 {
     74     if(!is_not_small(a, b))
     75         return "0";
     76         if(a == b)
     77             return "1";
     78         string x(a), y(b);
     79     int count = 0;
     80     while(is_not_small(x, y))
     81     {
     82         x -= y;
     83         ++count;
     84     }
     85     stringstream ss;
     86     ss << count;
     87     string result = "";
     88     ss >> result;
     89     return result;
     90 }
     91 string operator % (const string& a, const string& b)
     92 {
     93     if(!is_not_small(a, b))
     94         return a;
     95         if(a == b)
     96             return "0";
     97     string x(a), y(b);
     98     while(is_not_small(x, y))
     99     {
    100         x -= y;
    101        // cout << "***" << x << "***" << endl;
    102     }
    103     return x;
    104 }
    105 
    106 int main()
    107 {
    108     string a, b, c, result;
    109     std::ios::sync_with_stdio(false);
    110     while(cin >> a >> c >> b, b != "0")
    111     {
    112         a = del_pre_zero(a);
    113         b = del_pre_zero(b);
    114         if(c == "%")
    115             result = a % b;
    116         else if(c == "/")
    117             result = a / b;
    118             //cout << a - b << endl;
    119         cout << result << endl;
    120     }
    121     return 0;
    122 }
    10494 - If We Were a Child Again
  • 相关阅读:
    0001_two_sum
    shell 命令
    先验概率,后验概率,似然函数,最大似然估计【待整理】
    numpy学习笔记
    python: __slots__ 解析 (待整理)
    ubuntu,win7双系统问题
    安装sogou输入法
    pytorch安装
    稀疏向量的一些内容
    extern c
  • 原文地址:https://www.cnblogs.com/sanghai/p/3090506.html
Copyright © 2011-2022 走看看