新微赢技术网

标题: [求助]C++新手算法求助 [打印本页]

作者: 紫禁之颠    时间: 2009-11-3 04:13
标题: [求助]C++新手算法求助
大家好,大一学过C,C++现在刚学到输入/输出,遇到一个题目无法解出,感谢各位赐教。
题目:编写程序提示用户输入小数,然后输出该小数四舍五入到小数点后第二位的数字。
要求:用基本的输入输出语句写出算法,不要涉及判断与循环。
作者: 宝贝    时间: 2009-11-3 04:13
#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;
}
作者: 生活的成功者    时间: 2009-11-3 04:13
double d;
cin>>d;
cout<<setprecision(3);
cout<<showpoint<<d<<endl;
wfpb你那个是不是要进行判断啊,比如输入5.999你的结果是5.9:
作者: 火之雄狮    时间: 2009-11-3 04:13
#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一样。所以不算判断吧?
作者: 加非猫    时间: 2009-11-3 04:13
#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;
}
作者: 劳资ぶ龍哥    时间: 2009-11-3 04:13
感谢 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;
}
作者: ︶ㄣ帅々︷`    时间: 2009-11-3 04:13
不过还有一个问题。
上面step1中原来是这样写的:
minuend=static_cast<int>(inputDecimal*200)%10;
subtranhend=static_cast<int>(inputDecimal*100)%10;
这样写的话就不用中间变量tempDecimal,但是计算出的minuend不正确,不知为何,谢谢大家指点迷经。
作者: √金刚石猛男    时间: 2009-11-3 04:13
请输入 1.6888,  result=-1.
作者: 30岁就改变    时间: 2009-11-3 04:13
谢谢corrupt指出错误,经过实验,我发现算法存在错误,对小数点后第二位数字是5到9的都不能正确得出结果。
不过错误也算是收获啦。我会继续尝试。
作者: 玩QQ名字千万    时间: 2009-11-3 04:13
我用类型转换方法写了一个,大家看看有什么问题
#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;
}




欢迎光临 新微赢技术网 (http://bbs.weiying.cn/) Powered by Discuz! X3.2