| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1229 人关注过本帖
标题:[求助]C++新手算法求助
只看楼主 加入收藏
我是猎手
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-8-17
收藏
 问题点数:0 回复次数:19 
[求助]C++新手算法求助

大家好,大一学过C,C++现在刚学到输入/输出,遇到一个题目无法解出,感谢各位赐教。
题目:编写程序提示用户输入小数,然后输出该小数四舍五入到小数点后第二位的数字。
要求:用基本的输入输出语句写出算法,不要涉及判断与循环。

搜索更多相关主题的帖子: 算法 小数 
2006-08-17 18:21
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
#include <iostream>
#include <iomanip>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int n;
char dot;
char c1,c2,c3;
cout<<"shuru:";
cin>>n;
cin>>dot;
cin>>c1;
cin>>c2;
cin>>c3;
c2+=((c3-'0')>5);
cout<<n<<dot<<c1<<c2<<endl;
return 0;
}

[此贴子已经被作者于2006-8-18 19:24:02编辑过]


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-08-17 21:05
wangxiang
Rank: 2
等 级:新手上路
威 望:5
帖 子:376
专家分:0
注 册:2006-3-28
收藏
得分:0 
double d;
cin>>d;
cout<<setprecision(3);
cout<<showpoint<<d<<endl;
wfpb你那个是不是要进行判断啊,比如输入5.999你的结果是5.9:

2006-08-17 22:42
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
#include &lt;iostream&gt;
using namespace std;
void main()
{   
    double db;
    cout&lt;&lt;"输入:";
    cin&gt;&gt;db;
    db*=1000;
    int num=(int)db;
    int add=(num%10&gt;5);
    num/=10;
    db=num;
    db/=num;
    db+=add*(0.01)
    cout&lt;&lt;db&lt;&lt;endl;
}
小于号不是判断,只是一个运算符。这样用他不叫判断。
我只是从a&gt;b得到一个数字,就好象a-b一样。所以不算判断吧?

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-08-18 07:57
corrupt
Rank: 2
等 级:新手上路
威 望:3
帖 子:535
专家分:0
注 册:2004-9-29
收藏
得分:0 

#include<iostream>

using namespace std;

int main()
{
double d;
cout<<"shuru:";
cin>>d;
cout.setf(ios_base::fixed, ios_base::floatfield); // 设置定数格式输出
cout.precision(2); // 设置小数部分输出精度
cout<<d;
return 0;
}


2006-08-18 08:24
我是猎手
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-8-17
收藏
得分:0 

感谢 wfpb及大家的关注,经过思考,我也想出了一个算法,可以完全不用判断来实现四舍五入,完整代码如下:

#include <iostream>

using namespace std;

int main()
{

double inputDecimal,tempDecimal;
int minuend,subtranhend,result;

cout<<"Please enter a decimal. ";
cin>>inputDecimal;
cout<<endl;

tempDecimal = inputDecimal*200; //step1
minuend=static_cast<int>(tempDecimal)%10;
tempDecimal = inputDecimal*100;
subtranhend=static_cast<int>(tempDecimal)%10;

result=minuend-subtranhend; //step2
cout<<"Result is "<<result<<endl;
return 0;
}

2006-08-18 15:39
我是猎手
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-8-17
收藏
得分:0 

不过还有一个问题。
上面step1中原来是这样写的:
minuend=static_cast<int>(inputDecimal*200)%10;
subtranhend=static_cast<int>(inputDecimal*100)%10;
这样写的话就不用中间变量tempDecimal,但是计算出的minuend不正确,不知为何,谢谢大家指点迷经。

2006-08-18 15:46
corrupt
Rank: 2
等 级:新手上路
威 望:3
帖 子:535
专家分:0
注 册:2004-9-29
收藏
得分:0 
请输入 1.6888,  result=-1.

2006-08-18 15:49
我是猎手
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-8-17
收藏
得分:0 
谢谢corrupt指出错误,经过实验,我发现算法存在错误,对小数点后第二位数字是5到9的都不能正确得出结果。
不过错误也算是收获啦。我会继续尝试。
2006-08-18 16:40
lundon
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2006-5-7
收藏
得分:0 
我用类型转换方法写了一个,大家看看有什么问题
#include<iostream.h>
void main()
{
double a,b;
cout<<"输入一个小数:"<<endl;
cin>>a;
b=a+0.005;
b=b*100;
int c=(int)b;
double d;
d=(double)c/100;
cout<<d<<endl;
}


还想好好学习
2006-08-18 23:57
快速回复:[求助]C++新手算法求助
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017661 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved