习题2-5 分数化小数(decimal)

 应该是没有bug的,欢迎大家补充案例

#include<bits/stdc++.h>
using namespace std;
const int maxn=1000001;
int s[maxn];//如果小数部分会进位到整数上,那这个用来存变化后的整数部分
int main(){
    int a,b,c;
    while(cin>>a>>b>>c){
        int point[101];//用来存小数点后面的100位小数。
        int start=a/b;//start为整数部分。
        int h=a%b*10;
        for(int i=0;i<101;i++){
            point[i]=h/b;
            h=h%b*10;
        }
        //下面这个用来看未四舍五入前的数。
        printf("%d.",start);
        for(int i=0;i<101;i++)
            cout<<point[i]<<" ";
        cout<<endl;
        int add=0;
        bool flag=false;//用来判断小数点后面第一位是否会进位到整数上。
        if(point[c]>=5)
            add=1;
        for(int i=c-1;i>=0;i--){
            point[i]+=add;
            if(point[i]<9){
                add=0;
                break;
            }
            add=1;
            if(i==0&&point[i]==10)
                flag=true;
            if(point[i]==10)
                point[i]=0;
        }
        int j=0;
        if(flag==true){
            int resultstart=start;
            if(resultstart==0)
                s[0]=start+1;
            else{
                while(resultstart!=0){
                    s[j]=resultstart%10+add;
                    if(s[j]<9)
                        break;
                    if(s[j]==10)
                        s[j]=0;
                    resultstart/=10;
                    j++;
                }
            }
            for(int i=0;i<=j;i++)
            printf("%d",s[i]);
        }
        else
            printf("%d",start);
        printf(".");
        for(int i=0;i<c;i++)
            printf("%d",point[i]);
        printf("\n");
    }
}

猜你喜欢

转载自blog.csdn.net/chenyume/article/details/81285443
2-5