1234567章鱼君 发表于 2019-11-9 16:23:51

【章某鱼的学习笔记】大数相加+大数相乘

本帖最后由 1234567章鱼君 于 2019-11-9 17:55 编辑

#include<bits/stdc++.h>
using namespace std;
const int MAX=1e4;                //定义数字最大位数
char A,B;                //存放数字
int ans={0};                //存放相加结果
void Swap(char *A,int n)
{
        for(int i=0,j=n-1;i<j;j--,i++)
                swap(A,A);        //字符串逆序
}
int main()
{
        scanf("%s%s",A,B);        //以字符串的方式存放数字
        int m=strlen(A);
        Swap(A,m);
        int n=strlen(B);
        Swap(B,n);
        for(int i=0;i<m;i++)
                ans=ans+(A-'0');        //每一位数字相加存放ans中
        for(int i=0;i<n;i++)
                ans=ans+(B-'0');
        int i;
        for(i=0;i<MAX;i++)
        {
                ans=ans+ans/10;
                ans=ans%10;
        }
        for(i=MAX-1;i>=0;i--)        //判断ans长度
                if(ans)
                        break;
        for(i=i;i>=0;i--)
                cout<<ans;        //从后往前倒序输出
        cout<<endl;
        return 0;
}

1234567章鱼君 发表于 2019-11-9 17:54:45

改了一下
第一次发的时候没发现100+100这样的式子无法运算
用大数相乘测试的时候才发现这个bug

1234567章鱼君 发表于 2019-11-9 17:56:01

本帖最后由 1234567章鱼君 于 2019-11-9 17:59 编辑

大数相乘
#include<bits/stdc++.h>
using namespace std;
const int MAX=2e4;
char A,B;
int ans={0};
void Swap(char *A,int n)
{
        for(int i=0,j=n-1;i<j;i++,j--)
                swap(A,A);
}
int main()
{
        scanf("%s%s",A,B);
        int m=strlen(A);
        Swap(A,m);
        int n=strlen(B);
        Swap(B,n);
        for(int i=0;i<m;i++)        //A中的每一位数与B的每一位数相乘
                for(int j=0;j<n;j++)                //并存放在A与B位数之和的ans的位置上
                        ans=ans+(A-'0')*(B-'0');
        int i;
        for(i=0;i<MAX;i++)
        {
                ans=ans+ans/10;
                ans=ans%10;
        }
        for(i=MAX-1;i>=0;i--)        //判断ans长度
                if(ans)
                        break;
        for(;i>=0;i--)
                cout<<ans;
        cout<<endl;
        return 0;
}

1234567章鱼君 发表于 2019-11-9 17:57:23

楼上(对!就是我!)际遇也太惨了
页: [1]
查看完整版本: 【章某鱼的学习笔记】大数相加+大数相乘