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

思慕Simu 2015-10-03 10:34:27
/* 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输出是对的。
...全文
603 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
fefe82 2015-10-04
  • 打赏
  • 举报
回复
sprintf 打印出来,然后一位一位往外读。
思慕Simu 2015-10-03
  • 打赏
  • 举报
回复
没人么。。。。
思慕Simu 2015-10-03
  • 打赏
  • 举报
回复
引用 8 楼 lansong4 的回复:
[quote=引用 7 楼 qq_30560635 的回复:] [quote=引用 6 楼 lansong4 的回复:] 精度问题 就像浮点数一般不能用==号判断,而是在很小误差来判断相等。 如果你这个要精确处理,可以参考下面的 #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; }
能不能用低端一点的知识,我还只是小白,不要涉及数组啊,分支语句啊之类的东西啊。就像我用的那点儿东西一样。求求大神帮帮忙好么。[/quote] 按你的思路做,只对只有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;
}
[/quote] 噢噢噢噢,读取的小数点对吧,因为是整型,它读取一个字符。 太感谢啦。。。然后b就是那两位小数吧。
思慕Simu 2015-10-03
  • 打赏
  • 举报
回复
引用 8 楼 lansong4 的回复:
[quote=引用 7 楼 qq_30560635 的回复:] [quote=引用 6 楼 lansong4 的回复:] 精度问题 就像浮点数一般不能用==号判断,而是在很小误差来判断相等。 如果你这个要精确处理,可以参考下面的 #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; }
能不能用低端一点的知识,我还只是小白,不要涉及数组啊,分支语句啊之类的东西啊。就像我用的那点儿东西一样。求求大神帮帮忙好么。[/quote] 按你的思路做,只对只有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;
}
[/quote] 好牛。char ch; cin >> a; cin >> ch; cin >> b; 这个是什么意思额,输入的时候只输入了一个值(比如9999999999.90)cin>>ch;读取的哪一个?
Kuovane 2015-10-03
  • 打赏
  • 举报
回复
引用 7 楼 qq_30560635 的回复:
[quote=引用 6 楼 lansong4 的回复:] 精度问题 就像浮点数一般不能用==号判断,而是在很小误差来判断相等。 如果你这个要精确处理,可以参考下面的 #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; }
能不能用低端一点的知识,我还只是小白,不要涉及数组啊,分支语句啊之类的东西啊。就像我用的那点儿东西一样。求求大神帮帮忙好么。[/quote] 按你的思路做,只对只有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;
}
思慕Simu 2015-10-03
  • 打赏
  • 举报
回复
引用 6 楼 lansong4 的回复:
精度问题 就像浮点数一般不能用==号判断,而是在很小误差来判断相等。 如果你这个要精确处理,可以参考下面的 #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; }
能不能用低端一点的知识,我还只是小白,不要涉及数组啊,分支语句啊之类的东西啊。就像我用的那点儿东西一样。求求大神帮帮忙好么。
Kuovane 2015-10-03
  • 打赏
  • 举报
回复
精度问题 就像浮点数一般不能用==号判断,而是在很小误差来判断相等。 如果你这个要精确处理,可以参考下面的 #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; }
思慕Simu 2015-10-03
  • 打赏
  • 举报
回复
引用 2 楼 paschen 的回复:
比如要表示百倍,就用这个浮点数除以100.0,然后取整如转成int 如果要表示百分位,先把这个数乘以100.0,然后取整,然后除以100.0,然后用原数据减去所得数据后再乘100
好混乱。表示百分位那个。
思慕Simu 2015-10-03
  • 打赏
  • 举报
回复
引用 3 楼 ant2012 的回复:
这个可能是精度问题吧
那怎么矫正呢,不可能无法准确表达了吧??
二班的码农 2015-10-03
  • 打赏
  • 举报
回复
这个可能是精度问题吧
paschen 版主 2015-10-03
  • 打赏
  • 举报
回复
比如要表示百倍,就用这个浮点数除以100.0,然后取整如转成int 如果要表示百分位,先把这个数乘以100.0,然后取整,然后除以100.0,然后用原数据减去所得数据后再乘100

65,197

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧