zoukankan      html  css  js  c++  java
  • 算法提高 高精度加法

    问题描述
      在C/C++语言中,整型所能表示的范围一般为-231到231(大约21亿),即使long long型,一般也只能表示到-263到263。要想计算更加规模的数,就要用软件来扩展了,比如用数组或字符串来模拟更多规模的数及共运算。
      现在输入两个整数,请输出它们的和。
    输入格式
      两行,每行一个整数,每个整数不超过1000位
    输出格式
      一行,两个整数的和。
    样例输入
    15464315464465465
    482321654151
    样例输出
    15464797786119616
    数据规模和约定
      每个整数不超过1000位
     
    思路:用x数组正序记录两个字符串的各位之和,然后最后判断如果 x[i] > 10 进位 x[i+1]++ ,最后还需要判断999与1的情况如果存在即需要输出的时候多输出一位。
    学习:
    1.开始用gets来读入字符串,洛谷几个测试点全WA,去百度查原来是因为洛谷的OJ是Linux,换行符是' ',而windows的换行符是' ',' ',所以在判题的时候会出现一些问题
    2.c++的max函数可以在c语言中通过宏定义来实现 #define max(a,b) a>b ? a : b 
     1 #include<stdio.h>
     2 #include<string.h>
     3 #define max(a,b) a>b ? a : b
     4 
     5 int main()
     6 {
     7     char str1[1001] = { 0 };
     8     char str2[1001] = { 0 };
     9     int x[1001] = { 0 };
    10 
    11     gets(str1);
    12     gets(str2);
    13 
    14     int len1 = strlen(str1);
    15     int len2 = strlen(str2);
    16     int m = max(len1, len2);
    17     
    18     if (len1 > len2)
    19     {
    20         for (int i = 1; i <= len1; i++)
    21         {
    22             x[i] = str1[len1 - i] - 48;
    23         }
    24         for (int i = 1; i <= len2; i++)
    25         {
    26             x[i] += str2[len2 - i] - 48;
    27         }
    28     }
    29     else
    30     {
    31         for (int i = 1; i <= len2; i++)
    32         {
    33             x[i] = str2[len2 - i] - 48;
    34         }
    35         for (int i = 1; i <= len1; i++)
    36         {
    37             x[i] += str1[len1 - i] - 48;
    38         }
    39     }
    40 
    41     for (int i = 1; i <= m; i++)
    42     {
    43         if (x[i] >= 10)
    44         {
    45             x[i] -= 10;  //进位
    46             ++x[i + 1];
    47         }
    48     }
    49 
    50     if (x[m + 1] > 0) //如果出现999+1的情况 m++
    51     {
    52         ++m;
    53     }
    54 
    55     for (int i = m; i >= 1; i--)
    56     {
    57         printf("%d", x[i]);
    58     }
    59     return 0;
    60 }
     
  • 相关阅读:
    House of hello恶搞包之真假辨别
    Window phone用手机来控制电脑的多媒体播放
    《你是我的小羊驼》游戏ios源码
    打地鼠游戏ios源码
    Android系统的架构
    魔兽塔防游戏android源码
    抢滩登陆游戏android源码
    Java学生管理系统项目案例
    UITextView如何关闭键盘
    view上添加点手势 button无法响应点击事件
  • 原文地址:https://www.cnblogs.com/ZhengLijie/p/12654469.html
Copyright © 2011-2022 走看看