首页 > 代码库 > 华为机试—整数相除

华为机试—整数相除

两个整数相除,将结果用字符串返回。如果是循环小数,将循环的位用括号括起来。

函数原型为 void div(const int a,const int b,char *str)

输入:1 3

输出:0.(3)

本题写的简单点——》直接输出结果

#include<iostream>
#include<cstdio>
#include<map>
using namespace std;
void divv(const int a,const int b)
{
    int w[100];
    int q[100];
    int i,j,k;
    int m=a;
    int n=b;
    int cnt=6;
    int  r=0;
    int pos;
    int t;
    if(m*n<0)
        printf("-");
    m=m<0?-m:m;
    n=n<0?-n:n;
    i=0;
    j=0;
    k=0;
    printf("%d.",m/n);
    m=m%n;
    if(m==0)
    {
        printf("(0)");
    }
    else
    {
        while(k<cnt)
        {
            m*=10;
            t=m/n;
            m=m%n;
            if(m==0)
            {
                q[i++]=t;
                pos=i;
                break;
            }
            for(r=0;r<j;++r)
                if(w[r]==m)
                    break;
            if(r<j)
            {
                pos=r;
                break;
            }
            q[i++]=t;
            w[j++]=m;
            k++;
        }
        if(k<cnt)
        {
            for(r=0;r<pos;++r)
                printf("%d",q[r]);
            if(pos==i)
                printf("(0)");
            else{
                printf("(");
                for(;r<i;++r)
                    printf("%d",q[r]);
                printf(")");
            }
        }
        else
        {
            for(r=0;r<cnt;++r)
                printf("%d",q[r]);
        }

    }
    printf("\n");
}
int main(int argc, char *argv[])
{
    divv(1,3);
    divv(1225,1000);
    divv(8,3);
    divv(8,4);
    divv(1,1);
    return 0;
}

测试结果为:

技术分享


华为机试—整数相除