1.10494 - If We Were a Child Again

本文介绍了一种使用C++实现大数除法的方法,通过字符串处理和模拟手工除法过程来解决大数运算问题。该方法适用于处理超出基本数据类型范围的数值运算。

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

开始的时候,比较被除数和除数的长度,然后把被除数转换为长度<=除数的整数.(这样可以避免除数很大时,被除数反复转换为10进制的过程)
然后模拟除法的手算过程.题目限定n<2147483648,但一般用long long,保证中间结果不出错.

#define maxn 1000+1
int main()
{
    char num[maxn],sign[3];
    long long n;
    while(scanf("%s %s %lld",num,sign,&n)==3&&n>0)
    {
        if(num[0]=='0')
        {
            putchar('0');
            putchar('\n');
            continue;
        }
        unsigned int x=1+log10((double)n),len=strlen(num);
        long long sum=0;
        if(len<=x)
        {
            for(int i=0; i<len; i++)
                sum=10*sum+(num[i]-'0');
        }
        else if(len>x)
        {
            for(int i=0; i<x; i++)
                sum=10*sum+(num[i]-'0');
        }
        long long a=sum/n;
        int X[maxn],k=0;
        if(a!=0)///去除前导 0
        {
            X[k]=a;
            sum%=n;
            k++;
        }
        for(int i=x; i<len; i++)///必须从x开始
        {
            sum=sum*10+(num[i]-'0');
            X[k]=sum/n;
            sum%=n;
            k++;
        }///计算结果:存在X数组中的是除法结果,sum的值为求余结果.
        switch(sign[0])
        {
        case '/':
            for(int i=0; i<k; i++)
                putchar(X[i]+'0');
            break;
        case '%':
            printf("%lld",sum);
            break;
        }
        putchar('\n');
    }
    return 0;
}

转载于:https://my.oschina.net/pandacub/blog/138365

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值