一个程序!
有一个数组。里面装了double型的数。
求这些数中那些数自己各个位上的数相加为偶数。
那位大哥帮忙写个程序啊。我写了几个都不对。想不出来了。
问题点数:20、回复次数:6Top
1 楼killer1984(人在天涯)回复于 2005-04-01 23:04:12 得分 5
分两部分,一是取整数部分每一位数字:
1、取整
2、取10的模得到个位数
3、除以10
4、结果小于1结束否则返回第一步
二是取小数部分每位数字
1、用a-[a]的方式取出小数部分,其中[a]为对a取整,若为0则结束
2、乘以10,取出整数部分,得到一位数字
3、返回第一步
这样只要将得到的每一位相加就可以,判断是不是偶数只需要将相加的结果与1进行按位与运算,为0则是偶数,为1则是奇数Top
2 楼kobefly(科比--网络学习中)回复于 2005-04-01 23:04:25 得分 0
比较困难Top
3 楼flish(烨子风)回复于 2005-04-01 23:09:15 得分 0
直接给程序好吧。。我现在头晕死了。都不想写了。
Top
4 楼szws(克米帅)回复于 2005-04-02 11:34:32 得分 7
int judgeeven(double u)
{
char uunit[20]={0};
int num=0,sum=0;
int intepart=floor(u);
double decimal=u-intepart;
while(intepart>0)
{
uunit[num++]=intepart%10;
if(intepart<10)break;
intepart=intepart/10;
}
while(decimal>=0.000001)
{
uunit[num++]=floor(decimal*10);
if(decimal*10>=0.000001)break;
decimal=decimal*10-floor(decimal*10);
}
for(int i=0;i<num;i++)
sum+=uunit[i];
if(sum%2==0)
return 1;
else return 0;
//return sum;
}
int main()
{
//print();
const int n=8;
double a[n]={123, 341.23,23.45,21.6457,23.45645,11.002,23.6787,1.23456};
cout<<"己各个位上的数相加为偶数的有:"<<endl;
for(int i=0;i<n;i++)
{
if(judgeeven(a[i]))
{
cout<<a[i]<<' ';
}
}
return 0;
}Top
5 楼pcboyxhy(-273.15℃)回复于 2005-04-02 11:36:46 得分 0
存在误差问题Top
6 楼antter(JiangMiao)回复于 2005-04-02 12:46:55 得分 8
//我写个简短点的吧,16位有效位相加
//误差是double的问题,不是程序的问题。
#pragma warning(disable:4786)
#include <iostream>
#include <iomanip>
#include <algorithm>
using namespace std;
double data[] = {1.34,23423,23,44,22.6,1,3.1415926535};
const int N = sizeof(data)/sizeof(double);
// 计算各位的和
void sum(double old)
{
double a=old;
int rt=0;//各位的和
while(a>=1.0) a/=10;
for(int i=0,b;i<16;i++){
a -= b=(int)(a*=10);
rt += b%10;
}
cout<<setprecision(16)<<old<<' '<<rt<<' '
<<(rt%2?"奇数":"偶数")<<endl;
}
void main()
{
for_each(data,data+N,sum);
}Top




