zoukankan      html  css  js  c++  java
  • [HDOJ] 1753.大明A+B (大数加法)

    Problem Description

    话说,经过了漫长的一个多月,小明已经成长了许多,所以他改了一个名字叫“大明”。
    这时他已经不是那个只会做100以内加法的那个“小明”了,现在他甚至会任意长度的正小数的加法。
    现在,给你两个正的小数A和B,你的任务是代表大明计算出A+B的值。
    

    Input

    本题目包含多组测试数据,请处理到文件结束。
    每一组测试数据在一行里面包含两个长度不大于400的正小数A和B。
    

    Output

    请在一行里面输出输出A+B的值,请输出最简形式。详细要求请见Sample Output。
    

    Sample Input

    1.1 2.9
    1.1111111111 2.3444323343
    1 1.1
    

    Sample Output

    4
    3.4555434454
    2.1
    

    题意:大数相加
    思路:获取小数位置,对齐小数点,两边补零,记录小数点位置,去掉小数点,相加,输出时输出小数点。

    #include <algorithm>
    #include <cstdio>
    #include <cstring>
    #include <fstream>
    #include <iostream>
    #include <string>
    #include <vector>
    
    using namespace std;
    
    int FindDec(string &str) {
      int i;
      int len = str.size();
      for (i = 1; i < len; i++) {
        if (str[i] == '.') break;
      }
      return i;
    }
    
    int main() {
      string a, b;
    
      while (cin >> a >> b) {
        //整数位位数
        int len_int_a = FindDec(a), len_int_b = FindDec(b);
        //小数位位数
        int len_dec_a = a.size() - len_int_a - 1;
        int len_dec_b = b.size() - len_int_b - 1;
        //整书补零
        if (len_int_a > len_int_b)
          for (int i = 0; i < len_int_a - len_int_b; ++i) b = '0' + b;
        else
          for (int i = 0; i < len_int_b - len_int_a; ++i) a = '0' + a;
        //小数补0
        if (len_dec_a > len_dec_b)
          for (int i = 0; i < len_dec_a - len_dec_b; ++i) b = b + '0';
        else
          for (int i = 0; i < len_dec_b - len_dec_a; ++i) a = a + '0';
        //记录小数点位置,去除小数点
        int decPos = max(len_int_a, len_int_b);
        a = a.erase(decPos, 1);
        b = b.erase(decPos, 1);
        //计算
        int car = 0;
        int len = a.size();
        for (int i = len - 1; i >= 0; --i) {
          int x = a[i] - '0', y = b[i] - '0';
          car += (x + y);
          a[i] = (car % 10 + '0');
          car /= 10;
        }
        if (car) {
          a = '1' + a;
          len = a.size();
          decPos += 1;
        }
        //输出
        int i, j;
        for (i = 0; i < len; i++)
          if (a[i] != '0') break;
        for (j = i; j < decPos; j++) cout << a[j];
        for (j = len - 1; j >= decPos; j--)
          if (a[j] != '0') break;
        if (j >= decPos) {
          cout << ".";
          for (i = decPos; i <= j; i++) cout << a[i];
        }
        cout << endl;
      }
      system("pause");
      return 0;
    }
  • 相关阅读:
    jq获取滚动条高度
    用jq实现简单的tab选项卡
    bootstrap基础css样式1
    c3中的弹性盒子
    第一天注册
    Windows平台下结合 tortoiseSVN 和 VisualSVN Server 搭建SVN服务器并实现 web 站点同步
    【转载】IIS出现“HTTP 错误 500.0,C:phpphp-cgi.exe
    【转载】PHP5.3 配置文件php.ini-development和php.ini-production的区别
    解决 Composer-Setup.exe 安装过程中的报错
    IIS配置页面重写(配合插件url-rewrite2去除页面后缀名)
  • 原文地址:https://www.cnblogs.com/ruoh3kou/p/9893457.html
Copyright © 2011-2022 走看看