这个题目相对简单,就是浮点数为零的判断,这个要记住,判断浮点数是否为零,是不能直接用等于号的。例如Double m=0;if(m==0);//是错误的。要用(m-0<1e-6)两个相减得到的数据是否小于1e-6值。也许是C++用得习惯些,写起来顺手,用java写,老是有些语法错误,不过还是解决了。
这个题目是这样的:
最终就是求:1/2+1/3....+1/(n+1)的和接近用户输入的数据。
C++代码:
1 #include <iostream>
2 #include <vector>
3 #include <math.h>
4 using namespace std;
5
6 int main ()
7 {
8 double m_som;
9 vector<int> m_cards;//用到了vector,装最终得到的结果
10 while ( cin >> m_som )//输入数据
11 {
12 double m_compute=0;
13 int n=1;
14 if ( (m_som-0)<=1E-6)//判断出口,是否等于零
15 {
16 break;
17 }
18 while ( (m_som - m_compute)> 1e-6 )//两个相减是否接近零
19 {
20 m_compute=m_compute+(double)1/(double)(n+1);//求和
21 n++;
22 }
23 m_cards.push_back(n);//加入vector
24 }
25 for ( vector<int>::size_type it=0;it!=m_cards.size();++it)//输出
26 {
27 cout<<m_cards[it]-1<<" "<<"card(s)"<<endl;
28 }
29 system("pause");
30 return 0;
31 }
下面是java代码,两个相似:
View Code
1 import java.io.*;
2 import java.util.*;
3 import java.math.*;
4
5 public class four
6 {
7 public static void main(String args[])throws Exception
8 {
9 double m_comptu;
10 Vector<Integer > m_v=new Vector<Integer >();
11 Scanner in=new Scanner(System.in);
12 while(in.hasNext())
13 {
14 Integer n=1;
15 double m_sum=0;
16 m_comptu=in.nextDouble();
17 if(m_comptu-0<1e-6)break;
18 while(m_comptu-m_sum>1e-6)
19 {
20 m_sum=m_sum+(double)1/(double)(n+1);
21 n++;
22 }
23 m_v.addElement(n);
24 }
25 for(Integer t=0;t!=m_v.size();++t)
26 {
27 Integer m=m_v.elementAt(t);
28 m=m-1;
29 System.out.println(m+" "+"card(s)");
30 }
31 }
32 }
写这个java代码,让我知道了在用到vector等容器时,是不能用内置类型int的,因为vector里面装的是对象,就用到了Integer这个类来表示int,这个让我找了好久的错误,老是想不通为什么,终于找到这个答案了。