rt,我的想法是将小数和整数分离,然后小数不断*10,取整数位直到0,整数不断取%10的结果,即个位,取完结果再/10,最后将整数倒序+'.'+小数正序就行了,但是会产生精度误差,求解决方案。
#include<iostream>
#include<cstring>
#include<vector>
#include<stdio.h>
using namespace std;
string TO_STRING(double v){
int big=v;
double small=v-big;
char copb[30],cops[30];
int lencopb=0,lencops=0;
while(big!=0){
copb[lencopb]=48+big%10;
big/=10;
lencopb++;
}
while(small!=(0.0)){
small*=10;
copb[lencops]=48+(int)small;
lencops++;
small-=(int)small;
cout<<small<<'\n';
}
string ans;
for(int i=lencopb-1;i>=0;i--)ans.push_back(copb[i]);
if(v!=(int)v){
ans.push_back('.');
for(int i=0;i<lencops;i++)ans.push_back(cops[i]);
}
return ans;
}
int main(){
double a=114514.191981;
cout<<TO_STRING(a);
return 0;
}