UVa - 10494 - If We Were a Child Again

五道高精度题目中的最后一道了,终于可以结束高精度了。

说实话,高精度题目如果不用模板只是自己写的话做起来真的很恼火,可能是由于计算比较复杂吧,每次找出错误总要花很长时间。

回到这道题目,这是一道高精度除以单精度的题目(高精度除以高精度的还没做过),第一次由于不注意输出0的控制导致某些数据会输出了一大堆零000000... 果断WA一次,后来改了下控制了0的输出就过了...

还有一点,其实对于每一次输入,求商和模都在同一个运算过程之中(即对每一次输入,算出其商的同时模也算出来了),只是看要输出商还是模而已,不必分开来算的。

最后,还是要注意atoi,atol,atof这三兄弟的使用方法和使用范围啊!

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define maxn 1000
char in[maxn],a1[maxn],res[maxn],a2[12],temp[12],ch;
long y;

void get()
{
    int i,k;
    for(i=k=0;in[i]!=' ';i++)
            a1[k++]=in[i];
        a1[k]='\0';
        for(;in[i]==' ';i++);
        ch=in[i];
        for(i+=1;in[i]==' ';i++);
        for(k=0;in[i]!='\0';i++)
            a2[k++]=in[i];
        a2[k]='\0';
}

void divide()
{
    char temp[12];
    int i,k,a1len=strlen(a1),a2len=strlen(a2);
    int b=atoi(a2);  
    long c;
    for(i=0;i<a2len;i++)
        temp[i]=a1[i];
    temp[i]='\0';
    c=atol(temp);

    for(k=0,i=a2len;i<a1len;i++)
    {
        y=c%b;
        res[k++]=c/b+48;
        c=(a1[i]-48)+y*10;
    }
    y=c%b;
    res[k++]=c/b+48;
    res[k]='\0';
    if(ch=='/')
    {
        for(i=0;res[i]=='0';i++);
		if(res[i]==0) printf("0\n");
		else
			puts(res+i);
    }
    else
        printf("%ld\n",y);
}



int main()
{
    while(gets(in)!=NULL)
    {
        get();
        divide();
    }
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值