输入一个带除法运算的字符串,输出运算结果。其中,除不尽的,如果有循环小数,要用括号标识循环体。

输入一个带除法运算的字符串,输出运算结果。其中,除不尽的,如果有循环小数,要用括号标识循环体。
例如:输入:8/5  输出:1.6(而不是1.6000...)
         输入:1/3   输出:.(3)(而不是0.333...)

         输入:11/13 输出:.(846153)

#include <stdio.h>
#include <string.h>
#define mn 1000
static int divisor=0,dividend=0;
static int  p[mn],q[mn];
static int   i,r,t;

void getnum(int a,int b){/*a是除数,b是被除数*/
    for(i=0;i<mn;i++) //给数组p初始化值全为-1
    {
        p[i]=-1;
        q[i]=0;
    }
    t=0; //初始化值
    r=b%a; //把被除数取余赋给r
    
    while(r!=0&&(p[r]==-1)) //循环条件当r不为0且p[r]=-1时执行循环体
    {
        p[r]=t;             //余数r第一次出现的位置
        r=10*r;             //把被除数扩大10倍,以至于取第一个小数
        
        t++;
        q[t]=r/a;           //计算小数点后t位的值:取整,即为b/a的小数从小数点开始逐个取出放到数组q中
        r=r%a;              //算完一位就去掉一位,即取余对n
    }
}

void char2num(char a[]){/*用于将字符串转换为相应的除数和被除数*/
    int len=strlen(a);
    int i;
    for (i=0; i<=len; i++) {
        if (a[i]=='/') {
            break;
        }
        dividend=dividend*10+a[i]-'0';
    }
    for (i=i+1; i<len; i++) {
        divisor=divisor*10+a[i]-'0';
    }
}

int main(){
    char a[32];
    gets(a);
    char2num(a);
    getnum(divisor, dividend);
    int num_zheng;
    num_zheng=dividend/divisor;
    if (num_zheng>0)
        printf("%d.",num_zheng);
    else printf(".");
    if (r!=0)               //被除数不为0就执行以下语句
    {
        for(i=1;i<=p[r];i++)   //输出循环小数中前面非循环的部分
            printf("%d",q[i]);
        
        printf("(");            //输出循环的小数放在括号中
        
        for(i=p[r]+1;i<=t;i++)
            printf("%d",q[i]);
        
        printf(")");
    }
    else                    //被除数为0的情况
        for(i=1;i<=t;i++)    //输出不循环的小数
            printf("%d",q[i]);
    printf("\n");
}

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值