注册 登录
编程论坛 C++教室

这个程序实现什么功能?小弟先谢谢了!

hnhbzy0127 发布于 2009-08-06 15:25, 453 次点击
#include<fstream>
#include<iostream>
#include<set>
using namespace std;
//-------------------------------------
int main(){
  ifstream cin("1.txt");
  int num=0, f12=479001600;  // 12!
  multiset<int> s;
  for(int n; cin>>n; )
    if(f12%n==0){
      multiset<int>::iterator it=s.find(f12/n);
      if(it!=s.end()){
        num++;
        s.erase(it);
      }else s.insert(n);
    }
  cout<<num<<"\n";
  return 0;
}//====================================
5 回复
#2
pangding2009-08-06 17:14
回复 楼主 hnhbzy0127

 for(int n; cin>>n; )
    if(f12%n==0){
      multiset<int>::iterator it=s.find(f12/n);
      if(it!=s.end()){
        num++;
        s.erase(it);
      }else s.insert(n);
    }
 
把关键的这几步翻译一下就是:
 
for (一直输入数字到n)
    if (如果f12是你输入数的倍数)
    {
        就到s是找找有没有 f12/n 这个数。
         
        if (有)
        {
            记数加1。
            把这个找到的数删掉。
        }
        else // 没有的话
            就把刚输入的 n 插入s。
    }
    // 如果f12不是n的倍数,那就什么都不干,准备下一次循环。
 
 
暂时还没看出来这算法统计出来的num有什么用。
#3
hnhbzy01272009-08-06 19:19
if(it!=s.end()  
 
 这句的意思我理解是 if(这个数不是s最后一个)

为什么翻译成如果有的话?
#4
pangding2009-08-06 23:54
回复 3楼 hnhbzy0127

这个是find函数的规定。因为end是一个不存在的位置,逻辑上是s最后一个元素的后面。find返回end的意思是没有找到。加个 ! 就是“如果有”的意思
#5
hnhbzy01272009-08-07 14:38
谢谢啦
#6
金多虾2009-08-09 10:06
1