设为首页收藏本站

新微赢技术网

 找回密码
 注册
搜索
热搜: 回贴
查看: 1971|回复: 9
打印 上一主题 下一主题

[求助]C++新手算法求助

[复制链接]
跳转到指定楼层
1#
发表于 2009-11-3 04:13:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,大一学过C,C++现在刚学到输入/输出,遇到一个题目无法解出,感谢各位赐教。
题目:编写程序提示用户输入小数,然后输出该小数四舍五入到小数点后第二位的数字。
要求:用基本的输入输出语句写出算法,不要涉及判断与循环。
2#
发表于 2009-11-3 04:13:37 | 只看该作者
#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;
}
回复 支持 反对

使用道具 举报

3#
发表于 2009-11-3 04:13:38 | 只看该作者
double d;
cin>>d;
cout<<setprecision(3);
cout<<showpoint<<d<<endl;
wfpb你那个是不是要进行判断啊,比如输入5.999你的结果是5.9:
回复 支持 反对

使用道具 举报

4#
发表于 2009-11-3 04:13:39 | 只看该作者
#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一样。所以不算判断吧?
回复 支持 反对

使用道具 举报

5#
发表于 2009-11-3 04:13:40 | 只看该作者
#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;
}
回复 支持 反对

使用道具 举报

6#
发表于 2009-11-3 04:13:41 | 只看该作者
感谢 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;
}
回复 支持 反对

使用道具 举报

7#
发表于 2009-11-3 04:13:42 | 只看该作者
不过还有一个问题。
上面step1中原来是这样写的:
minuend=static_cast<int>(inputDecimal*200)%10;
subtranhend=static_cast<int>(inputDecimal*100)%10;
这样写的话就不用中间变量tempDecimal,但是计算出的minuend不正确,不知为何,谢谢大家指点迷经。
回复 支持 反对

使用道具 举报

8#
发表于 2009-11-3 04:13:43 | 只看该作者
请输入 1.6888,  result=-1.
回复 支持 反对

使用道具 举报

9#
发表于 2009-11-3 04:13:44 | 只看该作者
谢谢corrupt指出错误,经过实验,我发现算法存在错误,对小数点后第二位数字是5到9的都不能正确得出结果。
不过错误也算是收获啦。我会继续尝试。
回复 支持 反对

使用道具 举报

10#
发表于 2009-11-3 04:13:46 | 只看该作者
我用类型转换方法写了一个,大家看看有什么问题
#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;
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

申请友链|小黑屋|最新主题|手机版|新微赢技术网 ( 苏ICP备08020429号 )  

GMT+8, 2024-11-18 14:34 , Processed in 0.084909 second(s), 8 queries , Gzip On, Memcache On.

Powered by xuexi

© 2001-2013 HaiAn.Com.Cn Inc. 寰耽

快速回复 返回顶部 返回列表