万进制,乘法


#include<iostream>
#include<cstring>
using namespace std;
void num1(int s[],string st1);
int a[2501],b[2501],c[5002]; //此处可以进行2500位万进制乘法,即10000位十进制乘法。

int main()
{
    string str1,str2;
    cout<<"Please input two strings :";
    int len;
    cin>>str1>>str2;
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    memset(c,0,sizeof(c));
    num1(a,str1); //把str1从最低位开始,每4位存放在数组a中
    num1(b,str2); //把str2从最低位开始,每4位存放在数组b中
    for(int i=1;i<=a[0];i++) //作按位乘法并处理进位,此处是万进制进位
        for(int j=1;j<=b[0];j++)
        {
            c[i+j-1]+=a[i]*b[j];
            c[i+j]+=c[i+j-1]/10000;
            c[i+j-1]%=10000;
        }

    len=a[0]+b[0];//a[0]和b[0]存放的是每个数按4位处理的位数
    while((c[len]==0)&&(len>1)) len--;//去掉高位的0,并输出最高位

    cout<<c[len];

    for(int i=len-1;i>=1;i--)//把剩下来的每一位还原成4位输出
    {
        if (c[i]<1000)
            cout<<'0';
        if (c[i]<100)
           cout<<'0';
        if (c[i]<10)
            cout<<'0';
        cout<<c[i];
    }
    cout<<endl;

    return 0;
}

void num1(int s[],string st1)//此函数的作用就是把字符串st1,按4位一组存放在数组s中
{
    int k=1,count=1;
    s[0]=st1.length();//存放st1的长度,省去一长度变量
    for(int i=s[0]-1;i>=0;i--) //从最低位开始,处理每一位
    {
        if (count%4==0)
        {
            s[k]+=(st1[i]-'0')*1000;
            if(i!=0) k++;
        }
        if (count%4==1) s[k]=(st1[i]-'0');
        if (count%4==2) s[k]+=(st1[i]-'0')*10;
        if (count%4==3) s[k]+=(st1[i]-'0')*100;
        count++;
    }
    s[0]=k; //存放数组的位数,就是按4位处理后的万进制数的位数。
    return;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值