zoukankan      html  css  js  c++  java
  • 实数加法

    蒜头君让你帮忙求 2 个实数相加的和。

    输入输出中出现的实数都有如下的形式: P1P2...Pi.Q1Q2...Qj。对于整数部分,P1P2...Pi是一个非负整数;对于小数部分,至少有一位且最后一位Qj不等于0

    输入格式

    22 行,分别是两个加数。每个加数不超过 100100个字符。

    输出格式

    一行输出是相应的和。数据保证一定是一个小数部分不为 00 的实数。

    输出时每行末尾的多余空格,不影响答案正确性

    样例输入

    0.111111111111111111111111111111
    0.111111111111111111111111111111

    样例输出

    0.222222222222222222222222222222

     

     #include <bits/stdc++.h>
     using namespace std;
     
     
     int main()
     {
         string x,y;
         cin >> x >> y;
         int lenx = x.length(), leny = y.length();
         int tx, ty;
         //记录小数点位置
         for(int i = 0; i < lenx; i++)
         {
            if(x[i] == '.')
             {
                 tx = i;
                 break;
             }
         }
         for(int i = 0; i < leny; i++)
         {
             if(y[i] == '.')
             {
                 ty = i;
                 break;
             }
         }
         //小数点对齐
         while(tx < ty)
         {
             x = '0' + x;
             tx++;
             lenx++;
         }
         while(ty < tx)
         {
             y = '0' + y;
             ty++;
             leny++;
         }
         //等号对齐
         while(lenx < leny)
         {
             x = x + '0';
             lenx++;
         }
         while(leny < lenx)
         {
             y = y + '0';
             leny++;
         }
         int len = x.length();
         int flag = 0;
         //小数加法
         for(int i = len-1; i > tx; i--)
         {
             x[i] = x[i] - '0' + y[i];
             if(x[i] > '9')
             {
                 x[i] = (x[i] - '0') % 10 + '0';
                 if(i == tx+1)
                     flag = 1;
                 else
                     x[i-1] = x[i-1] + 1;
             }
         }
         //小数向整数有进位
         if(flag)
             x[tx-1] = x[tx-1] + 1;
         //整数加法
         for(int i = tx-1; i > 0; i--)
         {
             x[i] = x[i] - '0' + y[i];
             if(x[i] > '9')
             {
                 x[i] = (x[i] - '0') % 10 + '0';
                 x[i-1] = x[i-1] + 1;
             }
         }
         x[0] = x[0] - '0' + y[0];
         if(x[0] > '9')
         {
             x[0] = (x[0] - '0') % 10 + '0';
             x = '1' + x;
         }
         //去掉小数末尾的0
         int ans = lenx;
         for(int i = lenx - 1; i >= 0; i--){
             if(x[i] == '0')
             {
                 ans = i;
             }
             else
             {
                 break;
             }
         }
         for (int i = 0; i < ans; i++)
         {
             cout<<x[i];
         }
         return 0;
     }

     

    因上求缘,果上努力~~~~ 作者:每天卷学习,转载请注明原文链接:https://www.cnblogs.com/BlairGrowing/p/12680226.html

  • 相关阅读:
    leetcode 203
    vim插件管理器vundle
    centos7看电影
    getopt
    iOS/object-c: 枚举类型 enum,NS_ENUM,NS_OPTIONS
    "ALView+PureLayout.h"
    UIPageViewController教程
    (Mac ox 10.11+) CocoaPods安装,卸载,使用说明
    CocoaPods集成到Xcode项目中的步骤
    label_设置行距、字距及计算含有行间距的label高度
  • 原文地址:https://www.cnblogs.com/BlairGrowing/p/12680226.html
Copyright © 2011-2022 走看看