解题报告_18.5.18_POJ_2739

本文介绍了一种使用C++实现的大数除法算法,该算法能够处理超过标准整型变量所能表示的大数范围的除法运算。通过将大数转化为字符串形式,并利用模运算实现了高效的计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载自:https://blog.youkuaiyun.com/lyy289065406/article/details/6648524

#include<iostream>  
#include<string.h>  
using namespace std;  
  
const int size=1000;   //大数位数  
  
int main(void)  
{  
    int n; //进制数  
    while(cin>>n && n)  
    {  
        char* Stra=new char[size+1];  //字符串n进制被减数  
        char* Strb=new char[size+1];  //字符串n进制减数  
        int pa=0;  //Stra[]指针  
        int Diga=0,Digb=0;  //数字10进制被减数、减数  
  
        cin>>Stra>>Strb;  
  
        for(int j=0;Strb[j];j++)  //把n进制字符串减数 转换为 10进制数字减数  
        {  
            Digb*=n;  
            Digb+=Strb[j]-'0';  
        }  
        for(int i=0;Stra[i];i++)  //把n进制字符串被减数 转换为 10进制数字被减数  
        {  
            Diga*=n;  
            Diga+=Stra[i]-'0';  
  
            if(Diga>=Digb) //同余模公式,为避免大数计算,进制转化时顺便求模  
                Diga%=Digb;  
        }  
        if(!Diga)  
            cout<<0<<endl;  
        else  
        {  
            while(Diga)  //把10进制数字模 转换为 n进制字符串模  
            {  
                Stra[pa++]=Diga%n+'0';  
                Diga/=n;  
            }  
            for(pa--;pa>=0;pa--)  
                cout<<Stra[pa];  
            cout<<endl;  
        }  
  
        delete Stra;  
        delete Strb;  
    }  
    return 0;  
}  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值