搜索
有爱,有技术,有你^_^)y
╱人◕‿‿◕人╲订下契约(注册新用户)

合作站点账号登陆

QQ登录

只需一步,快速开始

快捷导航
查看: 266|回复: 3
收起左侧

[经验教程] 【章某鱼的学习笔记】大数相加+大数相乘

[复制链接]

签到天数: 8 天

连续签到: 1 天

[LV.3]偶尔看看II

11

主题

22

好友

6977

积分

序章

积分
6977
发表于 2019-11-9 16:23:51 | 显示全部楼层 |阅读模式

╱人◕‿‿◕人╲定下契约

您需要 登录 才可以下载或查看,没有账号?╱人◕‿‿◕人╲订下契约(注册新用户)

x
本帖最后由 1234567章鱼君 于 2019-11-9 17:55 编辑
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int MAX=1e4;                //定义数字最大位数
  4. char A[MAX+5],B[MAX+5];                //存放数字
  5. int ans[MAX+5]={0};                //存放相加结果
  6. void Swap(char *A,int n)
  7. {
  8.         for(int i=0,j=n-1;i<j;j--,i++)
  9.                 swap(A[i],A[j]);        //字符串逆序
  10. }
  11. int main()
  12. {
  13.         scanf("%s%s",A,B);        //以字符串的方式存放数字
  14.         int m=strlen(A);
  15.         Swap(A,m);
  16.         int n=strlen(B);
  17.         Swap(B,n);
  18.         for(int i=0;i<m;i++)
  19.                 ans[i]=ans[i]+(A[i]-'0');        //每一位数字相加存放ans中
  20.         for(int i=0;i<n;i++)
  21.                 ans[i]=ans[i]+(B[i]-'0');
  22.         int i;
  23.         for(i=0;i<MAX;i++)
  24.         {
  25.                 ans[i+1]=ans[i+1]+ans[i]/10;
  26.                 ans[i]=ans[i]%10;
  27.         }
  28.         for(i=MAX-1;i>=0;i--)        //判断ans长度
  29.                 if(ans[i])
  30.                         break;
  31.         for(i=i;i>=0;i--)
  32.                 cout<<ans[i];        //从后往前倒序输出
  33.         cout<<endl;
  34.         return 0;
  35. }
复制代码

评分

参与人数 1灵石 +50 喵点 +10 收起 理由
Blue_sdo + 50 + 10 o(* ̄▽ ̄*)ブ 发糖

查看全部评分

签名被小宅喵吞掉了~~~~(>_<)~~~~
回复

使用道具 举报

签到天数: 8 天

连续签到: 1 天

[LV.3]偶尔看看II

11

主题

22

好友

6977

积分

序章

积分
6977
 楼主| 发表于 2019-11-9 17:54:45 | 显示全部楼层
改了一下
第一次发的时候没发现100+100这样的式子无法运算
用大数相乘测试的时候才发现这个bug
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

签到天数: 8 天

连续签到: 1 天

[LV.3]偶尔看看II

11

主题

22

好友

6977

积分

序章

积分
6977
 楼主| 发表于 2019-11-9 17:56:01 | 显示全部楼层
本帖最后由 1234567章鱼君 于 2019-11-9 17:59 编辑

大数相乘
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int MAX=2e4;
  4. char A[MAX+5],B[MAX+5];
  5. int ans[MAX+5]={0};
  6. void Swap(char *A,int n)
  7. {
  8.         for(int i=0,j=n-1;i<j;i++,j--)
  9.                 swap(A[i],A[j]);
  10. }
  11. int main()
  12. {
  13.         scanf("%s%s",A,B);
  14.         int m=strlen(A);
  15.         Swap(A,m);
  16.         int n=strlen(B);
  17.         Swap(B,n);
  18.         for(int i=0;i<m;i++)        //A中的每一位数与B的每一位数相乘
  19.                 for(int j=0;j<n;j++)                //并存放在A与B位数之和的ans的位置上
  20.                         ans[i+j]=ans[i+j]+(A[i]-'0')*(B[j]-'0');
  21.         int i;
  22.         for(i=0;i<MAX;i++)
  23.         {
  24.                 ans[i+1]=ans[i+1]+ans[i]/10;
  25.                 ans[i]=ans[i]%10;
  26.         }
  27.         for(i=MAX-1;i>=0;i--)        //判断ans长度
  28.                 if(ans[i])
  29.                         break;
  30.         for(;i>=0;i--)
  31.                 cout<<ans[i];
  32.         cout<<endl;
  33.         return 0;
  34. }
复制代码
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

签到天数: 8 天

连续签到: 1 天

[LV.3]偶尔看看II

11

主题

22

好友

6977

积分

序章

积分
6977
 楼主| 发表于 2019-11-9 17:57:23 | 显示全部楼层
楼上(对!就是我!)际遇也太惨了
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

本版积分规则

小黑屋|手机版|技术宅(Z站|基宅) ( 粤ICP备18082987号-1 )

GMT+8, 2025-7-15 09:16 , Processed in 0.083190 second(s), 20 queries , Redis On.

Copyright © 2018 技术宅社区

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表