百亿的浮点数,将各位分开表示。

百亿的浮点数,将各位分开表示。求助……
/* 1552156 1班 冯华森*/
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
double a;
cin >> a;
long long A, B, C, D, E, F, G, H, I, J, K;
float L, M;
A = (long long)a / 10000000000;
B = (long long)(a - A * 10000000000) / 1000000000;
C = (long long)(a - A * 10000000000 - B * 1000000000) / 100000000;
D = (long long)(a - A * 10000000000 - B * 1000000000 - C * 100000000) / 10000000;
E = (long long)(a - A * 10000000000 - B * 1000000000 - C * 100000000 - D * 10000000) / 1000000;
F = (long long)(a - A * 10000000000 - B * 1000000000 - C * 100000000 - D * 10000000 - E * 1000000) / 100000;
G = (long long)(a - A * 10000000000 - B * 1000000000 - C * 100000000 - D * 10000000 - E * 1000000 - F * 100000) / 10000;
H = (long long)(a - A * 10000000000 - B * 1000000000 - C * 100000000 - D * 10000000 - E * 1000000 - F * 100000 - G * 10000) / 1000;
I = (long long)(a - A * 10000000000 - B * 1000000000 - C * 100000000 - D * 10000000 - E * 1000000 - F * 100000 - G * 10000 - H * 1000) / 100;
J = (long long)(a - A * 10000000000 - B * 1000000000 - C * 100000000 - D * 10000000 - E * 1000000 - F * 100000 - G * 10000 - H * 1000 - I * 100) / 10;
K = (long long)(a - A * 10000000000 - B * 1000000000 - C * 100000000 - D * 10000000 - E * 1000000 - F * 100000 - G * 10000 - H * 1000 - I * 100 - J * 10);
L = (float)(a - A * 10000000000 - B * 1000000000 - C * 100000000 - D * 10000000 - E * 1000000 - F * 100000 - G * 10000 - H * 1000 - I * 100 - J * 10 - K) * 10;
M = (float)((a - A * 10000000000 - B * 1000000000 - C * 100000000 - D * 10000000 - E * 1000000 - F * 100000 - G * 10000 - H * 1000 - I * 100 - J * 10 - K) * 10 - (int)L) * 10;
L = (int)L;
M = (int)M;
cout << "百亿位:" << A <<'\n'
<< "十亿位:" << B <<'\n'
<< "亿位:"     << C <<'\n'
<< "千万位:" << D <<'\n'
<< "百万位:" << E << '\n'
<< "十万位:" << F << '\n'
<< "万位:"     << G << '\n'
<< "千位:"     << H << '\n'
<< "百位:"      << I <<  '\n'
<< "十位:"      << J <<'\n'
<< "个位:"      << K <<'\n'
<< "十分位:"  << L <<'\n'
<< "百分位:"  << M <<'\n';
return 0;
}

编译器vs2015。


输入9999999999.90和9999999999.99时输出不对,99999999999.90输出也不对但是99999999999.99输出是对的。

------解决思路----------------------
引用:
Quote: 引用:

精度问题
就像浮点数一般不能用==号判断,而是在很小误差来判断相等。
如果你这个要精确处理,可以参考下面的

#include<string>
#include<iostream>
#include<iomanip>
using namespace std;

std::string getNameString(int nNumber)
{
std::string sRet[] ={"个位:","十位:","百位:","千位:","万位:","十万位:","百万位:","千万位:","亿位:","十亿位:","百亿位:",};
if (nNumber >= 0 && nNumber<=11)
{
return sRet[nNumber];
}

return "";
}


std::string getFractionNameString(int nNumber)
{
std::string sRet[] ={"十分位:","百分位:",};
if (nNumber >= 0 && nNumber <= 1)
{
return sRet[nNumber];
}

return "";
}

int main()
{
std::string sInput;
cin >> sInput;

int nPos = sInput.find('.');
if (nPos == std::string::npos)
{
for (int i = 0; i < sInput.length(); i++)
{
cout << getNameString(sInput.length() - i-1) << "位:" << sInput[i] << '\n';
}
}
else
{
for (int i = 0; i < nPos; i++)
{
cout << getNameString(nPos - i-1) << "位:" << sInput[i] << '\n';
}

for (int i = nPos + 1; i < sInput.length(); i++)
{
cout << getFractionNameString(i - nPos-1) << "分位:" << sInput[i] << '\n';
}
}



return 0;
}



能不能用低端一点的知识,我还只是小白,不要涉及数组啊,分支语句啊之类的东西啊。就像我用的那点儿东西一样。求求大神帮帮忙好么。


按你的思路做,只对只有2位小数点的有效,其它无,也不知你题目是什么,要用哪些知识做。


#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
long long a,b;
char ch;
cin >> a;
cin >> ch;
cin >> b;

long long A, B, C, D, E, F, G, H, I, J, K , L, M;
A = (long long)a / 10000000000;
B = (long long)(a - A * 10000000000) / 1000000000;
C = (long long)(a - A * 10000000000 - B * 1000000000) / 100000000;
D = (long long)(a - A * 10000000000 - B * 1000000000 - C * 100000000) / 10000000;
E = (long long)(a - A * 10000000000 - B * 1000000000 - C * 100000000 - D * 10000000) / 1000000;
F = (long long)(a - A * 10000000000 - B * 1000000000 - C * 100000000 - D * 10000000 - E * 1000000) / 100000;
G = (long long)(a - A * 10000000000 - B * 1000000000 - C * 100000000 - D * 10000000 - E * 1000000 - F * 100000) / 10000;
H = (long long)(a - A * 10000000000 - B * 1000000000 - C * 100000000 - D * 10000000 - E * 1000000 - F * 100000 - G * 10000) / 1000;
I = (long long)(a - A * 10000000000 - B * 1000000000 - C * 100000000 - D * 10000000 - E * 1000000 - F * 100000 - G * 10000 - H * 1000) / 100;
J = (long long)(a - A * 10000000000 - B * 1000000000 - C * 100000000 - D * 10000000 - E * 1000000 - F * 100000 - G * 10000 - H * 1000 - I * 100) / 10;
K = (long long)(a - A * 10000000000 - B * 1000000000 - C * 100000000 - D * 10000000 - E * 1000000 - F * 100000 - G * 10000 - H * 1000 - I * 100 - J * 10);
L = b/10;
M = b - L*10;

cout << "百亿位:" << A << '\n'
<< "十亿位:" << B << '\n'
<< "亿位:" << C << '\n'
<< "千万位:" << D << '\n'
<< "百万位:" << E << '\n'
<< "十万位:" << F << '\n'
<< "万位:" << G << '\n'
<< "千位:" << H << '\n'
<< "百位:" << I << '\n'
<< "十位:" << J << '\n'
<< "个位:" << K << '\n'
<< "十分位:" << L << '\n'
<< "百分位:" << M << '\n';
return 0;
}