博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
1.10494 - If We Were a Child Again
阅读量:6423 次
发布时间:2019-06-23

本文共 890 字,大约阅读时间需要 2 分钟。

hot3.png

开始的时候,比较被除数和除数的长度,然后把被除数转换为长度<=除数的整数.(这样可以避免除数很大时,被除数反复转换为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

你可能感兴趣的文章
再也不用担心this指向的问题了
查看>>
PHP那些事儿
查看>>
使用putty远程连接linux
查看>>
【comparator, comparable】小总结
查看>>
Node 版本管理
查看>>
34、重分布配置实验之分发列表distribute-list
查看>>
命令模式-对象行为型
查看>>
VS2017配置、提高生产力、代码辨识度 (工欲善其事必先利其器)新手必备!
查看>>
[Phoenix] 七、如何使用自增ID
查看>>
路由基本配置(上)
查看>>
windows上传文件到linux乱码解决
查看>>
fpm打包zabbix-agent
查看>>
Windows Server 2016 DNS Policy Split-Brain 3
查看>>
pythopn List(列表)
查看>>
blat命令行发邮件小工具
查看>>
学习笔记 十五: mariadb
查看>>
学习笔记 124: 预备知识总结
查看>>
windows server之AD(1)
查看>>
如何升级PowerShell
查看>>
linux-sed
查看>>