zoukankan      html  css  js  c++  java
  • 【HDOJ】1753 大明A+B

    注意数据格式,可以是整数,并且注意输出最简化浮点数。

      1 #include <stdio.h>
      2 #include <string.h>
      3 
      4 #define MAXNUM 420
      5 
      6 char a[MAXNUM], b[MAXNUM], c[MAXNUM], d[MAXNUM];
      7 int lena, lenb;
      8 int posa, posb;
      9 
     10 int addf(int bega, int begb, int *carry);
     11 int addi(int enda, int endb, int carry);
     12 void add();
     13 void output(int in, int fn);
     14 
     15 int main() {
     16 
     17     while (scanf("%s %s", a, b) != EOF) {
     18         add();
     19         memset(a, 0, sizeof(a));
     20         memset(b, 0, sizeof(b));
     21         memset(c, 0, sizeof(c));
     22         memset(d, 0, sizeof(d));
     23     }
     24 
     25     return 0;
     26 }
     27 
     28 void add() {
     29     int i, carry, in, fn;
     30 
     31     posa = posb = -1;
     32     for (i=0; i<MAXNUM; ++i) {
     33         if (a[i] == '')
     34             break;
     35         else if (a[i] == '.')
     36             posa = i;
     37         else
     38             a[i] -= '0';
     39     }
     40     lena = i;
     41     if (posa == -1)
     42         posa = lena;
     43 
     44     for (i=0; i<MAXNUM; ++i) {
     45         if (b[i] == '')
     46             break;
     47         else if (b[i] == '.')
     48             posb = i;
     49         else
     50             b[i] -= '0';
     51     }
     52     lenb = i;
     53     if (posb == -1)
     54         posb = lenb;
     55 
     56     fn = addf(posa+1, posb+1, &carry);
     57     in = addi(posa, posb, carry);
     58     output(in, fn);
     59 }
     60 
     61 void output(int in, int fn) {
     62     int i;
     63 
     64     // printf the integer part
     65     while (in>=0 && c[in]==0)
     66             --in;
     67     if (in < 0)
     68         printf("0");
     69     else {
     70         for (i=in; i>=0; --i)
     71             printf("%d", c[i]);
     72     }
     73 
     74     fflush(stdout);
     75     // printf the float part
     76     while (fn>=0 && d[fn]==0)
     77         --fn;
     78     if (fn>=0) {
     79         printf(".");
     80         for (i=0; i<=fn; ++i)
     81             printf("%d", d[i]);
     82     }
     83     printf("
    ");
     84     fflush(stdout);
     85 }
     86 
     87 int addi(int enda, int endb, int carry) {
     88     int cn = 0;
     89 
     90     while (enda || endb) {
     91         c[cn] += carry;
     92         if (enda) {
     93             --enda;
     94             c[cn] += a[enda];
     95         }
     96         if (endb) {
     97             --endb;
     98             c[cn] += b[endb];
     99         }
    100         carry = c[cn]/10;
    101         c[cn] %= 10;
    102         ++cn;
    103     }
    104     c[cn] += carry;
    105 
    106     return cn;
    107 }
    108 
    109 int addf(int bega, int begb, int *carry) {
    110     int i, len, ov = 0;
    111     int flena = lena - bega;
    112     int flenb = lenb - begb;
    113 
    114     len = (flena>flenb) ? flena : flenb;
    115 
    116     for (i=len-1; i>=0; --i) {
    117         d[i] += ov;
    118         if (bega+i < lena)
    119             d[i] += a[bega+i];
    120         if (begb+i < lenb)
    121             d[i] += b[begb+i];
    122         ov = d[i]/10;
    123         d[i] %= 10;
    124     }
    125 
    126     *carry = ov;
    127 
    128     return len;
    129 }
  • 相关阅读:
    Charles抓包使用教程
    学习规划
    log重复数据
    CNN实现推特文本分类
    conda env
    matplotlib画基础表
    决策树算法
    sklearn实现决策树
    分词与文本预处理工具
    matplotlib作图学习(1)
  • 原文地址:https://www.cnblogs.com/bombe1013/p/3695444.html
Copyright © 2011-2022 走看看